1 背景

Ubuntu 20.04是目前较常用的稳定版本,也是很多云服务器厂商提供的最新系统,很多人用来搭建服务器,以支持自己的个人网站。常用的博客系统例如wordpress、typecho都需要nginx、mysql、php环境。
然而,网上的LNMP教程极其老旧,有以下问题:

  • 大部分都是基于centos系统的教程,与ubuntu情况有出入。
  • 使用的Ubuntu版本很旧,大部分都是18.04甚至还有在用16.04的,已经过时。有的明明是20.04,但是还在用apt-get,动摇对文章可行性的信心。
  • 文章中提出的操作不可行,或者跳步,对初学者不友好。
  • 排版混乱,可读性差,让人失去阅读兴趣。

本文旨在解决上述问题,提供一个在Ubuntu 20.04下,完全可行的安装搭建LNMP的教程。
涉及版本:
Ubuntu 20.04 LTS
nginx 1.18
MariaDB 10.31
PHP-FPM7.4等
注意,本文是在普通用户具有sudo权限的情况下适用的!

2 安装nginx

2.1 更新可用软件包列表

sudo apt install

2.2 安装nginx

sudo apt install nginx

2.3 编辑nginx配置
输入命令cd /etc/nginx/sites-enable进入目录,然后sudo rm -f default删除里面的默认配置。
命令sudo vim test新建配置文件,然后输入以下内容:

server {
    listen       80;
    root   /var/www/html;
    server_name  localhost;
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
    #
    location / {
        index index.php index.html index.htm;
    }
    #error_page  404              /404.html;
    #redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html;
    }
    #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

2.4 启动、设置开机启动nginx

sudo systemctl start nginx
sudo systemctl enable nginx

2.5 在本地浏览器中访问以下地址,查看 Nginx 服务是否正常运行。

http://云服务器实例的公网 IP

如果显示如下内容,说明配置成功。
fdc40877928729679d392eb304a3f12c.png

3 安装数据库

3.1 安装mariadb数据库(也就是可以看成mysql的社区版本)。

sudo apt install mariadb-server mariadb-client

3.2 执行以下命令,启动 MariaDB 服务。

systemctl start mariadb

3.3 执行以下命令,设置 MariaDB 为开机自启动。

systemctl enable mariadb

3.4 执行以下命令,验证 MariaDB 是否安装成功。

sudo mysql

3.5 执行以下命令,退出 MariaDB。
q

4 安装PHP

4.1 安装php

sudo apt install php7.4-cli php7.4-common php7.4-mysqlnd php7.4-fpm

4.2 *观察安装的版本,如果是7.4,则执行以下命令,启动 PHP-FPM 服务。否则根据版本自行调整。从此往下均只支持7.4,其他版本未做验证,特此说明!

systemctl start php7.4-fpm

执行以下命令,设置 PHP-FPM 服务为开机自启动。

systemctl enable php7.4-fpm

4.3 修改nginx配置以支持php
输入

sudo vim /etc/nginx/sites-enable/test

按下i进入编辑模式,然后把里面fastcgi_pass那一行改成:

fastcgi_pass   unix:/var/run/php/php7.4-fpm.sock;

然后按下esc,然后按下:,然后输入wq,然后回车保存退出。
注意:本小节仅支持php-fpm 7.4版本,其他版本未做验证,特此说明!!!!

4.4 验证环境配置
如果/var/www/html文件夹下有其他文件,先用rm命令删掉。
然后执行以下命令,创建测试文件。

sudo vim /var/www/html/index.php

然后,按下i进入编辑模式,输入<?php phpinfo(); ?>,然后按下esc,然后按下:,然后输入wq,然后回车保存退出。
执行以下命令,重启 Nginx 服务。

sudo systemctl restart nginx

然后在本地浏览器中访问如下地址,查看环境配置是否成功。
http://云服务器实例的公网 IP
显示结果如下, 则说明环境配置成功。注意图片仅供示例,具体版本以实际为准!
640812413941a61efe29d7faa546ad80.png
注意:本小节仅支持php-fpm 7.4版本,其他版本未做验证,特此说明!!!!

一、所需工具

Ubuntu系统(版本16.04及以上,例如18.04)

二、说明

本教程采用pip安装TensorFlow,而且采用谷歌推荐的Create a virtual environment (recommended)方法安装,使得包安装与系统隔离,防止产生混乱

三、安装步骤

1、首先检查是否满足了所需的环境,输入下面三个命令:

python3 --version
pip3 --version
virtualenv --version

2 、如果版本号正确输出,表示都安好了,直接看第4步,否则继续往下看第3步。
3、如果没安好,使用下面的命令将python3、pip3和virtualenv安好。

sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install -U virtualenv # system-wide install

4、创建虚拟环境。

virtualenv --system-site-packages -p python3 ./venv

注意, ./venv表示的是你的虚拟环境的位置,请改成你想创建的位置。(这里我们创建在当前目录的venv文件夹下)
5、激活虚拟环境。

source ./venv/bin/activate

如果你前面创建虚拟环境时改了路径,这里也要改成:你的虚拟环境的路径/bin/activate
此时,你的shell前面都会以(venv)开头了。
6、更新pip。注意,由于我们是在虚拟环境里操作,这些操作都不会影响系统设置,都是在虚拟环境里进行的。

pip install --upgrade pip
pip list # show packages installed within the virtual environment

7、安装TensorFlow。以CPU版本为例,使用下面的命令。

pip install --upgrade tensorflow

如果你想安装其他版本,根据下面的说明选一个就行了:

Choose one of the following TensorFlow packages to install from PyPI:
tensorflow —Latest stable release for CPU-only (recommended for beginners)
tensorflow-gpu —Latest stable release with GPU support (Ubuntu and Windows)
tf-nightly —Preview build (unstable). Ubuntu and Windows include GPU support.

8、安装完成后,测试安装结果。输入下面的命令:

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

如果输出的最后一行是tf.tensor什么什么,恭喜你安装完成!
9、使用下面的命令退出虚拟环境。

deactivate

注意,因为我们是在虚拟环境里安装的TensorFlow,所以,你必须在使用TensorFlow前进入虚拟环境,在用完TensorFlow后再退出虚拟环境,否则TensorFlow是无法使用的。所以请仔细阅读下面的文字

四、注意事项

因为我们是在虚拟环境里安装的TensorFlow,所以,你必须在使用TensorFlow前进入虚拟环境,在用完TensorFlow后再退出虚拟环境,否则TensorFlow是无法使用的。
进入虚拟环境的命令:

source ./venv/bin/activate

如果你前面创建虚拟环境时改了路径,这里也要改成:你的虚拟环境的路径/bin/activate
进入虚拟环境后会,shell会变成类似开头
退出虚拟环境的命令:

deactivate

当我们得到一个概率分布,如何根据这个概率分布抽样是一个常见的问题。这篇文章将介绍alias method(别名采样),这种算法的运行时间复杂度为O(1)的,当然提前需要复杂度为O(n)的预处理。下面我将通过一个例子介绍别名采样算法。

问题背景

  假设一共存在A,B,C,D四种情况,它们的概率分别为 0.3,0.1,0.1,0.5。如何实现按概率抽样呢?
  比较常用的一种方法是生成一个数组:1,2,2,3,3,3,4,4,4,4,其中1对应A,2对应B,以此类推。然后随机在数组中抽取一个即可。这种方法简单易实现,但是这是仅仅有4种情况时。当情况变多,这种方法就会占用很大的空间了,所以并不适用于大规模的通用情况。
  另外,可以根据它们的概率密度分布生成累积分布:0.3,0.4,0.5,1。然后生成一个0-1之间的随机数,看它落在哪个区间。然而,这时需要与临界点进行比较。我们知道,插入有序数列最好的时间复杂度为O(logn),所以这种方法复杂度较大。
  我们这篇文章提到的alias method可以实现以运行复杂度为O(1)的方式抽样。当然它需要预处理,预处理的时间复杂度为O(n),但是重复跑的时候,运行时间复杂度低才是重要的。

别名采样算法

  下面介绍alias method的处理过程。
  我们知道等概率分布抽样的时间复杂度为O(1),考虑一种情况,如果A,B,C,D概率分布均为0.25,那我们随机生成1,2,3,4,抽中哪个就是哪个,复杂度自然为O(1),这是等概率分布抽样的情况。
  我们知道二项不等概率分布抽样的时间复杂度也为O(1),如果只有两个变量,比如A,B概率分布为 0.2,0.8.那我们用累积分布的方法,小于0.2就是A, 大于就是B,只需比较一次,所以复杂度也是O(1),这是二项分布抽样的情况。
  alias method就是把这两种方法结合起来。
  仍然以本文一开始提出的例子为例。原来的概率分布如下,我们用绿色代表A,蓝色代表B,紫色代表C,橙色代表D:

首先我们把原概率分布乘以N(为后面的拼接做准备),这里是N=4。得到:1.2,0.4,0.4,2.0,如图所示。

  我们把它拼成等概率分布和二项不等概率分布:

  注意拼接的过程中,每一列最多有两种情况,这样才能让每一列都符合二项分布。
  做完以上处理后,我们就可以开始抽样了。首先我们以等概率分布抽一列,然后生成一个0-1之间的随机数。
  举例来说,例如我们首先抽中了第四列(概率为0.25)。然后在第四列中进行二项分布抽样,如果小于0.8,绿色,代表A,反之,就是橙色,代表D。这两个操作的复杂度均为O(1),故总时间复杂度也为O(1)。
  那么这样抽样是正确的吗?换句话说,在原概率分布中抽到A的概率是0.3,那使用alias方法抽到的概率还是0.3吗?
  我们仍然以抽取A情况为例。原来抽中a的概率为0.3。运用alias method方法后,抽中a的概率为抽中第一列+抽中第四列且随机数小于0.2,算起来为0.25+ 0.25 * 0.2) = 0.3,完全一样。

参考文献

1, http://blog.csdn.net/sky_zhe/article/details/10051967
2, https://www.cnblogs.com/zqiguoshang/p/5885455.html

网上有很多搭建ghost博客的教程,但是有的步骤不详细,也少有使用云数据库搭建的教程,基本都是本地数据库。这篇教程的目的就是想要教大家一步一步搭建ghost博客,同时把数据库放在腾讯云数据库上,不再使用本地数据库。

一、所需环境

华为云服务器(配置:内存2G,硬盘40G,操作系统Ubuntu 18.04)
腾讯云数据库(类型:MySQL,版本5.7)

二、详细步骤
1、安装GCC和G++

1.1、首先查看系统是否已经安装,使用如下命令:
gcc --version
g++ --version
如果正确显示版本则已经安装,直接进入下一步操作。否则,使用如下命令进行安装:

sudo apt-get install gcc
sudo apt-get install g++

1.2、如果没有安装开发编译工具包,则使用如下命令安装:

sudo apt-get install build-essential

2、安装Node.js

执行以下命令,安装Node.js

sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

3、安装nginx

3.1、输入以下命令安装Nginx。

sudo apt-get update
sudo apt-get install nginx

3.2、验证是否正确安装:
在浏览器中通过域名或者 IP 地址进行访问Nginx,如果Nginx正常启动则会打开Welcome to nginx的欢迎页面。
3.3、配置Nginx
新建配置文件
vim /etc/nginx/sites-available/ghost.conf
在配置文件中输入以下内容:

server {

listen 80;
server_name xx.xxx; #这里写自己的域名或者ip地址
location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:2368;
}

}

3.4、把配置文件软链接到sites-enabled中:
sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
3.5、重启Nginx
sudo service nginx restart

4、创建新用户

4.1、执行以下命令,创建新用户。
adduser 你的用户名
输入此命令后,会要求你输入密码,自己设置即可。
然后要求你输入一系列信息,我们直接按回车表示默认即可。
最后问你是否确认,输入y
4.2、执行以下命令,将新创建的用户添加到superuser组。
usermod -aG sudo 你刚才创建的用户名
4.3、执行以下命令,切换到你刚才创建的用户。
su 你刚才创建的用户名

5、安装Ghost-CLI

sudo npm i -g ghost-cli

6、安装Ghost

6.1、创建一个文件夹:
sudo mkdir -p /var/www/ghost
6.2、更改所有者:
sudo chown [user]:[user] /var/www/ghost
6.3、进入我们刚才创建的文件夹:
cd /var/www/ghost/
6.4、用Ghost-CLI 安装Ghost。
ghost install
接下来会提示我们没有找到本地数据库:

由于我们要使用云数据库,所以无需本地安装数据库,所以直接输入y,按下回车
接下会进行配置:
在配置数据库的时候,host填写云数据库地址,username填写云数据库用户名,表名填写事先在云数据库中创建好的表名。密码填写云数据库密码。如果你的云服务器和云数据库不在同一可用区之内,你需要使用外网地址,否则使用内网即可。
注意,有云数据库如何创建用户、创建数据库、内网外网是什么等基本概念,请参考腾讯云官方文档,或参考本站今后会推出的文章。
根据作者的实际经验,由于访问云数据库需要在地址后面加端口,而将地址:端口直接写在上面host中并不能让配置成功,需要单独使用vi config.production.json打开配置文件,在有关数据库的配置中加一项port,填写云数据库的端口。
如下所示:

7、开始配置用户

至此安装完成,访问http://你的IP或域名/ghost按系统说明配置即可