分类: Linux

Ubuntu安装Plex Media Player

Plex官网上并没有针对Linux提供Plex Media Player安装包,但是好在有一些第三方基于官方APP制作的原生Linux GTK程序可以使用。
Ubuntu 64位桌面版可以去https://knapsu.eu/data/plex/ 下载最新的AppImage直接使用。目前也支持绝大多数Linux的桌面发行版。
下载后给下载好的AppImage文件(如Plex_Media_Player_2.58.1-ae73e074_x64.AppImage)加运行权限即可。
此处通过命令行的方式详细的讲一下过程:
先在Home目录下新建一个AppImage目录:

mkdir -p ~/AppImages
cd ~/AppImages

然后从https://knapsu.eu/data/plex/ 找到最新的AppImage的URL,截至到本文发布时间(2022年1月4日),最新版是2.58.1
将其下载到~/AppImages,并将下载的文件改名。

wget https://knapsu.eu/data/plex/Plex_Media_Player_2.58.1-ae73e074_x64.AppImage
mv Plex_Media_Player_2.58.1-ae73e074_x64.AppImage Plex_Media_Player.AppImage

给这个AppImage加运行权限:

sudo chmod +x Plex_Media_Player.AppImage

运行这个文件

./Plex_Media_Player.AppImage

首次运行会提示是否将Plex Media Player的快捷方式加入系统程序列表,建议选是。如果选否的话,以后依然可以通过双击AppImage或者通过./Plex_Media_Player.AppImage方式启动。
这样Plex Media Player就安装成功了。
首次运行需要通过plex.tv/link 进行账户关联,而不是直接通过输入用户名密码的形式登录账户。因此可以判断,该Appimage大概率是从移动端或者TV端打包来的。


Ubuntu安装Enpass

Enpass可以在 CentOS 7, Fedora 28, Mint 19 and Ubuntu 16.04+的64位Linux系统上安装。
在Ubuntu上的安装非常简单:
在/etc/apt/sources.list中添加源:

sudo -i
sudo echo "deb https://apt.enpass.io/ stable main" > /etc/apt/sources.list.d/enpass.list

导入key:

wget -O - https://apt.enpass.io/keys/enpass-linux.key | tee /etc/apt/trusted.gpg.d/enpass.asc

安装:

apt-get update
apt-get install enpass
exit

Ubuntu 18.04/20.04 生产力配置及优化美化

〇、首先,将软件源更换为国内源(可跳过),安装升级速度更快。

左下打开软件列表搜索并打开Softwares & Updates, 在Ubuntu Software -> Download from -> Other -> China中选择合适的镜像站就可以了,推荐阿里云(mirrors.aliyun.com)镜像。
然后更新一下,

sudo apt update && sudo apt upgrade -y

一、基础软件安装

WPS Office 2019

首先,卸载libreoffice

sudo apt remove libreoffice-common

官网下载WPS office 2019 for Linux

sudo dpkg -i wps-office_11.1.0.8372_amd64.deb

如果缺失字体,需要下载wps_symbol_fonts.7z,解压后:

sudo mv wps_symbol_fonts /usr/share/fonts/

中文输入法

安装搜狗输入法,从官网下载最新的安装包,

sudo dpkg -i sogoupinyin_2.4.0.3469_amd64.deb
sudo apt install -f

从设置找到语言->管理安装语言,待更新安装完成,设置为fcitx
重新登入,在右上角的托盘->配置,添加搜狗输入法

PDF阅读器

福昕阅读器下载.run格式的安装包,直接运行安装(如果没有执行权限,sudo chmod +x xxxxxxxxxxxxx.run)。

网易云音乐

目前官网1.1.0版本的安装包有点问题,安装后可以使用sudo运行起来。
或者第三方打包
从网上能找到的最完美的解决方案是使用重新打包过的安装包(传送门),安装完成后,删除~/.cache/netcase-cloud-music一次,应该是该文件夹访问权限的原因,之后就可以正常使用了。
官网更新了18.04的1.2.1版本,下载直接安装即可。

Chrome

官网下载安装即可,有可能要翻墙。

视频播放器VLC

sudo apt install vlc

安装zsh(也可以安装fish)

sudo apt install zsh
# 切换到zsh
chsh -s /bin/zsh 

安装Oh-my-zsh

sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

安装插件highlight,高亮语法

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

在Oh-my-zsh的配置文件中~/.zshrc中添加插件

plugins=(git z extract zsh-syntax-highlighting zsh-autosuggestions)

最后使配置生效

source ~/.zshrc

这里需要重新登入一下,否则zsh只会在当前终端中应用。

QQ/TIM

QQ官方发布了Linux版本,古董界面丑的很,也难用的很。推荐10.3的安装方法。

Wine QQ/TIM

其次,使用wine安装qq,推荐以下两个教程,但都有不同程度的问题,如果可以忍受可以使用:

  • https://phpcj.org/wineqq/
  • https://github.com/askme765cs/Wine-QQ-TIM

    使用deepin-wine 安装

    这个暂时应该是比较完美的安装方法了
    项目地址deepin-wine-for-ubuntu,这个项目最近没有维护,不过安装方法是一样的,有人发帖更新了安装脚本。

    启用“Minimize on Click”

    gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

二、gnome shell 扩展

Ubuntu Software => Add-ons => Shell extensions中安装(或直接在Ubuntu Software主界面直接搜索)。

  1. NetSpeed
    监控并显示实时网速。
  2. Coverflow Alt-Tab
    优化Alt-Tab,帅!
    三 美化
  3. Terminal
    在终端中右键->preferences中,禁止菜单,禁止滚动条,以及在配色中
  4. 主题
    首先安装 tweaks,使用该软件统一管理主题中的各个部分

    sudo apt install gnome-tweak-tool 

    而具体的主题等可以在gnome-look.org找到,非常多,下面选择几个我觉得好看的设置。

  5. Shell
    如果Shell显示不可修改,

    sudo apt install gnome-shell-extensions

    重新登入一下,然后在Tweaks->Extensions中将User themes打开,重启tweacks在Apperance -> Themes -> Shell选择,我直接选择使用Vimix主题。

  6. 合并Top bar & Dock
    将桌面打造成Windows风格,
    安装插件,并在TWeaks->extensions中打开

    sudo apt install gnome-shell-extension-dash-to-panel

    重新登入,打开该插件的设置,进行细微处的调节。

    三、针对双系统

  7. 双系统造成的windows时间错误
    先在ubuntu下更新一下时间,确保时间无误:

    sudo apt install ntpdate
    sudo ntpdate time.windows.com

    然后将时间更新到硬件上

    sudo hwclock --localtime --systohc

    方法2
    http://ubuntuhandbook.org/index.php/2016/05/time-differences-ubuntu-1604-windows-10/

  8. rEFInd 引导双系统
    如果你的电脑支持UEFI启动引导又嫌弃默认的启动界面丑,你可以使用rEFInd来管理你的启动项,推荐一个主题Minimal. 引导设置可参考rEFInd引导Win10+Ubuntu14双系统.
  9. 隐藏grub引导菜单
    如果使用了其他引导,可以隐藏ubuntu的grub引导菜单:

    sudo vim /etc/default/grub

    修改内容为

    GRUB_DEFAULT=0
    GRUB_HIDDEN_TIMEOUT=0
    GRUB_HIDDEN_TIMEOUT_QUIET=true
    GRUB_TIMEOUT=0
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    GRUB_DISABLE_OS_PROBER=true

    更新grub

    sudo update-grub

修改Ubuntu键位为MacOS键位及外观

〇、前言

本文假定读者正在使用标准Mac键盘(左Command键在左Option键的右边)操作Ubuntu
Ubuntu 18.04/20.04 Desktop 英文版

一、全局调换LCtrl和LCommand

1.编辑配置文件

sudo nano /usr/share/X11/xkb/symbols/pc

2.找到如下两条配置项

key <LCTL> { [ Control_L ] };

key <LWIN> { [ Super_L ] };

3.修改为:

key <LCTL> { [ Super_L ] };

key <LWIN> { [ Control_L ] };

4.重启

二、修改系统快捷键

此处修改的快捷键我们按照键盘表面的标注来表示,而不是已经对调过的键位来表示。
找到Activites –> Settings –> Keyboard Shortcuts
Launch Terminal : Control + Command + T
Search : Command + Space
Switch Applocations : Command + Tab
Switch Windows of an application : Command + `
Save a screenshot to Pictures : Command + Shift + 4
Record a short screencast : Command + Shift + 5
Eject : Command + E
Log out : Shift + Command + Q
Lock Screen : Ctrl + Command + Q
Close Window : Command + Q
Hide Window : Command + H
Toggle Full Screen Mode : Control + Command + F
Raise Window if coverd otherwise lower it : Command + M

三、修改文件管理器快捷键并取消删除确认

Ubuntu的文件管理器默认是nautilus,想修改nautilus的快捷键目前还没有很直观的办法,除非修改源代码自己重新编译。但这个工程确实是有点大了。
因此我们使用python-nautilus,使python可以调用gtk库,并自己用python编写一个插件。
安装python-nautilus:

sudo apt install python-nautilus

创建插件文件。

mkdir -p ~/.local/share/nautilus-python/extensions
nano ~/.local/share/nautilus-python/extensions/OSXKey.py

以下是插件代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, gi
gi.require_version('Nautilus', '3.0')
from gi.repository import GObject, Nautilus, Gtk, Gio, GLib

def ok():
    app = Gtk.Application.get_default()
    #Move to trash
    app.set_accels_for_action( "view.move-to-trash", ["<Primary>BackSpace", "Delete"] )
    #Delete permanently
    app.set_accels_for_action( "view.delete-permanently-shortcut", ["<Primary><alt>BackSpace", "<shift>Delete"] )
    #Rename
    app.set_accels_for_action( "view.rename", ["Return", "KP_Enter"] )
    #Open
    app.set_accels_for_action( "view.open-with-default-application", ["<Primary>o","<Primary>Down"] )
    #Go Home
    app.set_accels_for_action( "win.go-home", ["<shift><Primary>h"] )
    #Go to Path
    app.set_accels_for_action( "win.enter-location", ["<Primary>g","<Primary>k"] )
    #Go up
    app.set_accels_for_action( "win.up", ["<Primary>Up"] )
    #Go back
    app.set_accels_for_action( "win.back", ["<Primary>Left"] )
    #Go forward
    app.set_accels_for_action( "win.forward", ["<Primary>Right"] )
    #Show/hide Sidebar
    app.set_accels_for_action( "app.show-hide-sidebar", ["<Primary><alt>s"] )

class KeybindingRemap(GObject.GObject, Nautilus.LocationWidgetProvider):
    def __init__(self):
        pass

    def get_widget(self, uri, window):
        ok()
        return None

取消删除至回收站确认:
通过dconf-editor来修改Nautilus的设置,先安装:

sudo apt install dconf-editor
dconf-editor

打开dconf-editor,搜索nautilus,找到/org/gnome/nautilus/preferences
comfrim-Trash 改为关闭

四、修改Terminal快捷键

Terminal快捷键的差异主要在复制、粘贴、中断以及标签操作上。
打开我们刚刚安装的dconf-editor
查找:/org/gnome/terminal/legacy/keybindings/
修改如下项(修改前先取消"Use default value"):
close-Tab : <Ctrl>w
close-Window : <Ctrl>q
copy: <Ctrl>c
find: <Ctrl>f
new-tab: <Ctrl>t
new-window: <Ctrl>n
paste: <Ctrl>v
select-all: <Ctrl>a
zoom-in: <Ctrl>equal
save-contents: <Ctrl>s
经过以上修改,复制变为Command+C,但是同时,Ctrl+C也失去了中断程序的功能。因为Ctrl实际上被系统识别为Super,而Super的键值是无法被Terminal捕捉的。现在中断程序的快捷键在Terminal里被自动替换为Ctrl+Alt+C(在键盘上标注为Command+Alt+C)。当然,我们也可以直接关闭Terminal窗口来中断当前程序。也可以通过stty intr ^I 命令来修改中断快捷键为Ctrl+I(键盘标注为Command + I )或者将I替换成其他自定义单一字母,替换前建议先使用stty -a命令查看系统默认快捷键。

五、用Caps lock切换输入法

0.此处默认读者已经配置好fcitx并且正常启用。
1.安装 Gnome Tweak(已安装可跳过)

sudo apt-get install gnome-tweak-tool

2.用 Gnome Tweak 把 caps lock 改成 menu 键
打开 Tweaks,依次点击 Keyboard&Mouse -> Additional Layout Options
继续依次点击 Caps Lock behavior -> Make Caps Lock an additional Menu key,设置自动保存,关闭窗口即可。
3.安装你喜欢的输入法,如搜狗输入法、GooglePinyin(fcitx-googlepinyin)、Sunpinyin(fcitx-sunpinyin),并在fcitx中添加。fcitx中要保留一个En-US,一个中文输入法。
4.

fcitx-configtool

配置fcitx,点击 Global Config,找到Trigger Input Method,更改快捷键,这时按下键盘上的Caps lock键,设置后会显示"MENU"。这时应该可以通过Caps Lock来切换输入法了。
如果按Caps Lock时中文输入法名称在输入框下方一闪而过,但没有成功切换,然而双击Caps Lock却可以成功切换的话,那么继续下一步设置。
Activites –> Settings –> Universal Access(AccessX) –> Typing Assistant(AccessX) –> Bounce Keys调整为On
建议将Acceptence delay调整到非常低的一个值,较高的值会影响正常的打字。比如,用较快的速度输入"Good"时,系统会将"oo"削减成一个"o"。建议先调到最低值,然后逐渐调高,直至单击Caps Lock能正常切换输入法为止。
这样即可使用Caps Lock流畅的切换输入法了。

六、修改窗口的关闭、最小化、最大化按钮到左边

之前安装的Gnome Tweak可以实现。具体操作:
打开Gnome Tweak。
Window Titlebars –> Titlebar Buttons –> Placement –> Left

七、修改Ubuntu外观:BigSur主题

安装Application主题和Icon主题

sudo apt install git gtk2-engines-murrine gtk2-engines-pixbuf sassc optipng inkscape libglib2.0-dev-bin
git clone https://github.com/vinceliuice/WhiteSur-gtk-theme
./WhiteSur-gtk-theme/install.sh
git clone https://github.com/vinceliuice/WhiteSur-icon-theme
./WhiteSur-icon-theme/install.sh

打开Gnome Tweak。
Appearance –> Themes –> Applications –> WhiteSur
Appearance –> Themes –> Icons –> WhiteSur
效果应用是即时的。
安装Dash To Dock插件(可选),把Dash变成Dock的样式(20.04实测无效)

sudo apt install make gettext
git clone https://github.com/micheleg/dash-to-dock.git
cd dash-to-dock
make
make install

重启后打开Gnome Tweak。
Extensions –> Dash to Dock –> On


Ubuntu20.04使用ZeroTier搭建Moon服务器以及在OpenWRT上的应用

服务器安装Zerotier

公网服务器,需要有固定IP,一条命令安装Zerotier:

curl -s https://install.zerotier.com/ | sudo bash

出现如下提示则代表安装完成:

*** Enabling and starting ZeroTier service...
Synchronizing state of zerotier-one.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zerotier-one

*** Waiting for identity generation...

*** Success! You are ZeroTier address [ 515xxxxxxx ].

生成Moon配置文件

cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
# 然后编辑该配置文件
sudo nano moon.json

默认该配置文件是如下内容:

{
 "id": "515xxxxxxx",
 "objtype": "world",
 "roots": [
  {
   "identity": "515xxxxxxx:0:e4d8xxxxxx11d962bb14771fa1e9bf1e10f9519c82590c372abbad4c6b2b473f27c389f6f7c8c328d513ce449xxxxxxe4956a318af32e16df>
   "stableEndpoints": []
  }
 ],
 "signingKey": "54685533b0ef4fc66f92e6a010dc304c4531acdd68a4486d800436d42aabfc5a9eed745cb9b7a3fe0983f521adc672f5b153bed420782d431c35058e3110c3>
 "signingKey_SECRET": "3325fd28ec1ec8ae058c255825bc3259d1935bf4bb2b23e361eefec5729337e0f196caba311ba42245f2b77d707f04f5ed33c81b8bf74d31189524c>
 "updatesMustBeSignedBy": "54685533b0ef4fc66f92e6a010dc304c4531acdd68a4486d800436d42aabfc5a9eed745cb9b7a3fe0983f521adc672f5b153bed420782d431c3>
 "worldType": "moon"
}

其中"id"是本机器在zerotier中的id,此处默认无需修改
"stableEndpoints"需要填写服务器的公网IP(假设此处我们的服务器公网IP为114.114.114.114,默认9993端口, 且是UDP协议的, 此处在防火墙上需要开放UDP,否则其他设备连接不上Moon
"stableEndpoints": ["114.114.114.114/9993"]
仅需修改这一条后保存退出。

生成签名文件

sudo zerotier-idtool genmoon moon.json

运行后提示类似wrote 000000515xxxxxxx.moon (signed world with timestamp 1640010832xxxx)表示签名完成。文件名去掉开头的00000就是机器的ID

将 moon 节点加入网络

在/var/lib/zerotier-one中新建一个moons.d的目录,我们默认目前依旧在/var/lib/zerotier-one目录下,然后将刚才签名好的moon文件移动道moons.d中

sudo mkdir moons.d
sudo mv 000000515xxxxxxx.moon moons.d

重启zerotier服务以应用配置

sudo service zerotier-one restart 

此时,Moon服务器已经配置完成、正常运行,并且可以接受客户端的连接请求了
下一步准备配置客户端,首先通过SFTP或者其他方式,将刚刚生成的000000515xxxxxxx.moon下载到本地。

配置OpenWRT软路由

我们前提默认OpenWRT已经安装了Zerotier并且已经配置完毕
ssh登录OpenWRT后,在zerotier的目录下创建moons.d目录

mkdir /etc/config/zero/moons.d

加入MOON服务器方式一(推荐)

通过SFTP将moon服务器中的000000515xxxxxxx.moon文件上传到刚刚创建的moons.d目录中

加入MOON服务器方式二

如果不方便上传文件,那么可以简单通过命令加入:

zerotier-cli orbit 515xxxxxxx 515xxxxxxx

后面两串数字是MOON服务器的ID,两个的原因是orbit参数支持同时连接两台MOON服务器(同样,通过moon签名文件的方式也可以连接多个MOON服务器),本文中我们仅配置了一台MOON服务器,因此两个ID相同即可。
重启软路由,输入zerotier-cli listpeers以检查zerotier目前已经连接的节点是否包含我们刚刚配置好的moon服务器。
如果不出意外,反馈的应该是这样的:

200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 296cxxxx17 192.168.2.191/29994;12457;5030 21 1.8.3 LEAF
200 listpeers 515xxxxxxx 114.114.114.114/9993;2347;2073 27 1.8.4 MOON
200 listpeers 61dxxxxx89 - -1 1.4.6 LEAF
200 listpeers 61dxxxxxcb 50.7.73.34/9993;2347;1448 905 - PLANET
200 listpeers 62fxxxxx71 50.7.252.138/9993;2347;1078 1266 - PLANET
200 listpeers 778xxxxx90 103.195.103.66/9993;2347;2050 285 - PLANET
200 listpeers 992xxxxxb7 195.181.173.159/9993;2347;2066 279 - PLANET

其中role列为MOON的那一条如果显示出IP与版本号,说明已经成功连接了。latency为MOON服务器的延迟。MOON为用户自建节点服务器,PLANET为官方节点服务器,LEAF为客户端。

疑问:MOON服务器本身,是否需要加入我们自己组建的Zerotier局域网呢?
答案:不需要且不能加入。因为加入之后,这台服务器就的角色就变成了LEAF。


Ubuntu20.04 下编译安装ffmpeg

安装编译必须的包

sudo apt install build-essential pkg-config checkinstall git cmake yasm nasm 

安装依赖库

sudo apt install libfaac-dev libjack-jackd2-dev libgmp3-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html zlib1g-dev  libx265-dev libx264-dev libspeex-dev libfdk-aac-dev libnuma-dev  gnutls-bin libaom-dev libass-dev libbluray-dev libopenmpt-dev libopus-dev libshine-dev libsnappy-dev libsoxr-dev libtwolame-dev libvo-amrwbenc-dev libvpx-dev libwavpack-dev libwebp-dev liblzma-dev

安装SDL2

SDL是编译 ffplayer 所必须的外部库,而 Ubuntu 环境并不会对其默认安装,故而需要用户手动安装。而 SDL1 有些过时,目前使用广泛的是 SDL2,因此这里推荐安装SDL2。
SDL 下载地址:

http://www.libsdl.org/download-2.0.php

下载后,同样解压,然后进入目录

./configure --prefix=/usr/local
sudo make
sudo make install

git编译安装ffmpeg

从gitee网站上clone ffmpeg 国内的网站速度会快很多

git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
#切换到4.4 分支 可以切换到任何自己想要的分支上
git checkout release/4.4
cd ffmpeg

配置自己需要哪些库

./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-iconv --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-lzma --enable-zlib --enable-gmp --enable-libvorbis --enable-libvo-amrwbenc --enable-libspeex --enable-libxvid --enable-libaom --enable-libopenmpt --enable-libfdk-aac --enable-nonfree --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=gcc --host-cflags= --host-ldflags=

开始make

make
# 安装 安装位置为上面 --prefix= 后面的目录 可以随意更改 
sudo make install

手动指定ffmpeg自带的组件的库

cd /etc/ld.so.conf.d/
sudo touch ffmpeg.conf
sudo nano ffmpeg.conf

在文件中写入你的ffmpeg lib的位置 本文中的是/usr/local/ffmpeg/lib

/usr/local/ffmpeg/lib
sudo ldconfig

配置环境变量

将 FFmpeg 添加至环境变量:

sudo nano ~/.bashrc

将光标调至文件末尾
添加如下内容:

export PATH=$PATH:/usr/local/ffmpeg/bin

保存文件


Ubuntu搭建Nginx+Mysql+Flask+uWSGI

Ubuntu 20.04 64 Bit
Python 3.8.2
第一件事当然是更新一下

sudo apt update
sudo apt upgrade

安装并设置宝塔面板

为了部署和配置方便,我们这里直接安装宝塔面板。

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

登录宝塔面板后,编译安装LNMP:
Nginx+ MySQL+ PureFtpd
(如果站点纯粹使用python则无需安装php和phpmyadmin)

部署flask+uWSGI环境

先安装依赖

sudo apt-get install build-essential python3-dev libssl-dev libffi-dev
sudo apt-get install python3-pip
sudo pip3 install uwsgi flask pymysql

在宝塔上部署网站

我们先在宝塔上新建一个站点,FPT和MYSQL一起新建也可以,假定域名为example.com,目录为yoursite。假定去阿里云申请免费证书,并下载适用于nginx的证书文件,并将证书文件yoursert.pem和yoursite.key放置于目录yoursite下

Nginx配置:

server {
    listen 80;
    server_name example.com www.example.com;              #此处填写域名管理选项卡中绑定的域名,多个域名用空格隔开
    rewrite ^(.*) https://$server_name$1 permanent;
}
server
{
    # ssl证书使用443
      listen 443 ssl;
    server_name example.com www.example.com ;              #此处填写域名管理选项卡中绑定的域名,多个域名用空格隔开
    charset utf-8;
    # 证书.pem的存放地址
      ssl_certificate /www/wwwroot/yoursite/yourcert.pem;
      # 证书.key的存放地址
      ssl_certificate_key /www/wwwroot/yoursite/yourcert.key;
      ssl_session_timeout 5m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_prefer_server_ciphers on;
      error_page 497 https://$host:$server_port$uri$is_args$args;
    location / {
        include uwsgi_params;                       # 导入uwsgi配置 
        uwsgi_pass 127.0.0.1:5555;                  # 转发端口,需要和uwsgi配置当中的监听端口一致
        uwsgi_param UWSGI_PYTHON /usr/bin/python3;  # Python解释器所在的路径,如果有虚拟环境可将路径设置为虚拟环境
        uwsgi_param UWSGI_CHDIR /www/wwwroot/yoursite;         # 项目根目录
        uwsgi_param UWSGI_SCRIPT run:app;           # 项目的主程序,比如你整站用run.py文件来响应客户端请求,文件中app = Flask(__name__),那么这里就填run:app 
    }
}

这样设定好以后网站默认是开启SSL的,SSL监听的是443端口,需要在宝塔的安全面板中,在防火墙设置里放行443,否则网站将无法访问。

UWSGI配置:

在网站根目录新建一个uwsgi.ini,内容如下:

[uwsgi]
# uWSGI 的监听端口
socket          = 127.0.0.1:5555
# 项目根目录
chdir           = /www/wwwroot/yoursite
# Flask 项目的启动文件
wsgi-file       = run.py
# 程序内启用的application变量名
callable        = app 
# 进程数量
processes       = 4
vacuum          = true
master          = true
# py文件更新后自动重启
py-autoreload   = 1
# 设置stats文件和pidfile位置
stats           = %(chdir)/uwsgi.status
pidfile         = %(chdir)/uwsgi.pid
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize       = %(chdir)/uwsgi.log

启动uWSGI服务:

uwsgi --ini /www/wwwroot/yoursite/uwsgi.ini &

这时候可以测试一下网站是否能够访问。如果出现500错误或者Bad Gateway,可以cat /www/wwwroot/yoursite/uwsgi.log查看一下uWSGI的日志

设置uwsgi自启动服务

在 Ubuntu 上使用 Nginx+ uWSGI 部署Flask项目,在实际生成环境中需要系统自动启动这两项服务,Ubuntu默认自启动Nginx,需要对uwsgi设置为系统自启动。

Ubuntu20.04采用systemctl来管理开机启动的脚本,对于uwsgi服务要设置成系统服务来进行自启动。

创建uwsgi.service文件

sudo nano /etc/systemd/system/uwsgi.service

代码如下:

[Unit]
Description=uWSGI server
After=syslog.target 
[Service]
#用户名
User=www
#用户组
Group=www
#项目目录
WorkingDirectory=/www/wwwroot/yoursite
#服务启动的代码(可以用which uwsgi查看uwsgi安装位置)
ExecStart=/usr/local/bin/uwsgi --ini /www/wwwroot/yoursite/uwsgi.ini
#服务停止代码
ExecStop=/usr/local/bin/uwsgi --stop /www/wwwroot/yoursite/uwsgi.pid
#这种方式可以让你用nohup起动服务
Type=oneshot
#表示虽然nohup后台运行了,也认为这个服务是起来的
RemainAfterExit=yes

[Install]
#指明会跟随系统启动而启动该服务 
WantedBy=multi-user.target

启动、停止、重启、查看服务命令 :

sudo systemctl start uwsgi
sudo systemctl stop uwsgi
sudo systemctl restart uwsgi
sudo systemctl status uwsgi

加入、关闭系统自启动:

sudo systemctl daemon-reload
#执行enable命令后在/etc/systemd/system/multi-user.target.wants目录下生成uwsgi.sevice的链接文件 
sudo systemctl enable uwsgi
sudo systemctl disable uwsgi

How to move Plex metadata and index data to new drive/partition and/or directory location

The most recent versions of the Plex Media Server has the option to auto index, depending on your library size, this can take up a lot of space, and in some instances you may need to have this saved in a different location. You may also have a very large media collection, and the metadata could be very large in size too. Well, I recently had this issue and between metadata and index data I had almost 55GB of a 64GB Solid State Drive used just for Plex metadata and index data! Here’s how I moved all of that data to a new location and did it without making any changes to the configuration…

Update 3/3/2014: Check the comments below for additional methods to change the directory, but the easiest will be modifying the /etc/default/plexmediaserver file and specifying the location.

Just to note, my current setup is using OMV (Open Media Vault) that runs Debian, but this should be the same for almost any version of linux, including Ubuntu, etc. The very simple approach I took to make this change was by using a symlink, and a few other small changes.

Stop Plex

First thing you will need to do is to stop Plex Media Server

sudo service plexmediaserver stop

Make sure all Plex services are killed

Next run this command to make sure all Plex services are killed and no longer running

killall -u plex

Copy Metadata and Index Data to new location

Now copy all of the current meta and index data to the new location, this may take a while depending on the size. This is assuming that Plex data is stored at “/var/lib/plexmediaserver/Library/Application Support” which is the default for Debian based Plex Media Server installs. This command below should copy the Application Support directory to the /new/dir/to/plex, ultimately making it “/new/dir/to/plex/Application Support”

cp -rf '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server' '/data/DataCenter/Plex Media Server'

Move old directory to .OLD in case of issues

Now we will move the old directory to .OLD in case we need to restore it if there are any issues

sudo mv '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server' '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server.OLD'

Create symbolic link to new directory

Next we will create a symbolic link to the new location for our meta and index data

sudo ln -s '/data/DataCenter/Plex Media Server' '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server'

Change owner of new location to Plex

We now have to update the permissions and change the owner to Plex otherwise there will be issues

sudo chown -R plex.plex '/var/lib/plexmediaserver/Library/Application Support/Plex Media Server'
sudo chown -R plex.plex '/data/DataCenter/Plex Media Server' 

Start Plex Media Server

Next we will start Plex Media Server to make sure everything worked correctly. After issuing the command below, login to Plex via http://ipofserver:32400/manage and make sure everything is still the same and working correctly.

sudo service plexmediaserver start

Remove old Meta and Index Data files

As long as everything works correctly, you can now remove the old directory we renamed in case of any issues.

sudo rm -rf '/var/lib/plexmediaserver/Library/Application Support.OLD'

Voila, you have now moved your Meta and Index data to a new location