Ubuntu使用Ajenti面板快速搭建WEB环境及建立站点

浏览本页前,请确保你没有使用任何浏览器翻译工具。包括但不限于Chrome的网页自动翻译。以免翻译工具改动代码内容。

本教程适用于16.04 LTS和18.04 LTS版本,18.04下安装时会缺失一个依赖,可使用由我提供的源来解决,具体见下文Ajenti安装部分。另18.04下安装时Mysql会使用新的机制,不会要求输入root密码,而且可以使用socket方式登录(即系统root用户可以直接访问数据库无需密码),可以使用mysql_secure_installation命令来执行设置密码等操作。将root用户登录使用的socket方式切换为密码认证方式的sql语句为
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root用户的新密码';

Ajenti是国外一个功能非常强大的轻型的Linux服务器管理面板,采用Python架构,修改扩展非常简单,Ajenti V是Ajenti一个虚拟主机管理面板插件,下面通过本文给大家介绍Ajenti开源免费的服务器管理面板和Ajenti V虚拟主机面板使用的详细教程。

一、前期部署流程

源更新

更新并重启

sudo apt-get update && sudo apt-get dist-upgrade -y
sudo reboot

更新过程中会出现一个紫色框提示,并且默认选中Keep the local version currently installed,直接回车即可。

添加软件源

重新连接SSH

sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo add-apt-repository ppa:ondrej/nginx-mainline -y
sudo apt-get update

安装解压工具unzip和文件传输工具lrzsz

sudo apt-get install unzip lrzsz -y

安装Ajenti

16.04 LTS可直接使用官方提供sh脚本安装

wget -O- https://raw.github.com/ajenti/ajenti/1.x/scripts/install-ubuntu.sh | sudo sh

18.04 LTS因缺少依赖会安装失败,可使用本人修改后的sh脚本安装

wget -O- https://raw.github.com/HanadaLee/ajenti/1.x/scripts/install-ubuntu.sh | sudo sh

安装Ajenti V

sudo apt-get install ajenti-v ajenti-v-nginx ajenti-v-mysql ajenti-v-php7.3-fpm php7.3-mysql -y

中途会弹出紫色框,提示输入mysql数据库root用户的密码,请设置一个安全性较高的密码。

重启Ajenti、Nginx、Mysql

sudo service ajenti restart
sudo service nginx restart
sudo service mysql restart

二、Ajenti面板初始设置

访问面板并进行初步设置

浏览器访问https://服务器的IP地址:8000

请确保(阿里云)已打开8000端口
Chrome等浏览器会提示您的连接不是私密连接,此时点击高级,继续前往即可。

使用 root / admin 登录

打开左侧Configure,切换语言至zh-CN(简体中文)。

在Account栏目点击Change password,更换Ajenti面板的密码。

取消勾选Send feedback。

然后点击下方"Save"保存设置,再点击"Restart"重启并使用新密码登录。

点击左侧Mysql,在弹出的窗口中填写数据库密码。

点击左侧网站,在右侧启用Ajenti V。

更改数据库配置

点击左侧文件管理器
找到如下文件

/etc/mysql/mysql.conf.d/mysqld.cnf

点击编辑,在其结尾追加如下内容。

performance_schema = OFF

binlog_cache_size = 64K
thread_stack = 256K
join_buffer_size = 512K
query_cache_type = 0
max_heap_table_size = 64M
skip-external-locking
performance_schema_max_table_instances = 400
table_definition_cache = 400
table_open_cache = 128
key_buffer_size = 32M
max_allowed_packet = 100G
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 0M
tmp_table_size = 64M
sql-mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp = true

max_connections = 100
max_connect_errors = 100
open_files_limit = 65535

log-bin = mysql-bin
binlog_format = mixed
server-id = 1
expire_logs_days = 10
early-plugin-load = ""

default_storage_engine = InnoDB
innodb_buffer_pool_size = 64M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

重启mysql

sudo service mysql restart

点击左侧MySQL,此时会弹出提示框,输入mysql数据库的root密码,第一部分配置环境时在粉色界面输入的密码。

三、HTTPS SSL 证书申请、自签SSL证书的上传和设置

SSL证书名目繁多,获取途径比较多样。有单域名证书、多域名证书、泛域名证书等等,这里主要介绍Let's Encrypt证书,该证书签发机构由多家知名互联网厂商联合发起,是目前比较广泛被小型网站和个人博客使用的SSL证书。而且使用acme.sh脚本可以实现自动签发、续期证书,相对于手动申请证书也更易于管理。
可转至「使用acme.sh快速签发Let's Encrypt证书」查看相应使用说明。

如果使用自行签发或者自行获取的HTTPS SSL证书,建议进行以下操作(证书存放目录仅作参考)

证书参考路径:/etc/nginx.custom.confs/ssl/
证书文件权限设置为 0600 root root。
上传证书、私钥并修改文件权限
chown -R root:root /etc/nginx.custom.confs/ssl/
chmod -R 600 /etc/nginx.custom.confs/ssl/

四、Nginx基础配置

进入文件夹/etc/,新建文件夹nginx.custom.confs,然后进入该文件夹,新建如下两个文件defaults.conf、ssl.conf,文件内容如下

defaults.conf

client_header_buffer_size 8k;
client_max_body_size 68m;
add_header X-Provider "xxxxxxxx";

add_header X-Provider "xxxxxxxx"; 为可选项,可用于标识服务器主机名。如不需要可以删除该行

ssl.conf

ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
add_header Referrer-Policy "origin";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";

五、Nginx反向代理Ajenti,Ajenti使用域名访问。

新建控制台站点

左侧网站-新建站点。(站点名建议为Sys_Panels)

在综合信息栏下,取消勾选维护模式,输入放置的目录(建议值:/srv/Sys_Panels),然后点创建目录。

在域名栏下,输入作为Ajenti面板访问的域名(建议值panels.example.com)。

在端口栏下,将80端口改为443,勾选 SSL HTTP2。

在SSL栏下,填入第三篇获取的证书、私钥的路径。

在高级栏下的自定义配置框内,填入如下内容。

include /etc/nginx.custom.confs/ssl.conf;
include /etc/nginx.custom.confs/defaults.conf;

location ~ /ajenti.* {
    rewrite (/ajenti)$ / break;
    rewrite /ajenti/(.*) /$1 break;
    proxy_pass http://unix:/var/run/ajenti.sock;
    proxy_redirect / /ajenti/;
    proxy_set_header Host $host;
    proxy_set_header Origin http://$host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
}

在左侧文件管理器里找到创建的网站所在的目录,将目录权限改为750 www-data:www-data(设置以递归方式)

配置Ajenti

点击左侧栏的配置项目。

在http服务器的主机栏目内将0.0.0.0改为/var/run/ajenti.sock

在SSL处将「使用SSL」项取消勾选。

点击保存设置并且重新启动。

完成上述步骤后可(在阿里云)关闭8000端口。

重启NGINX服务并使用域名进入网站

重启NGINX

sudo service nginx restart
访问https://配置的域名/ajenti进入Ajenti。

在配置的站点根目录新建 index.html,权限改为750 www-data:www-data
index.html的内容如下
===========index.html=============

<script>window.location.href='/ajenti/';</script>
===============================

完成后访问域名可自动进入控制面板(https://配置的域名 -> https://配置的域名/ajenti

六、新建网站及其配置

本篇以建立一个WordPress站点为例介绍如何新建和配置网站。

新建站点

创建/srv/网站目录/,目录权限改为750 www-data:www-data。

网站-新的网站-输入网站名-创建(网站名建议和网站目录名一致)。

点击刚创建的网站右边的管理,设置WEB目录为srv/网站目录/,并且取消勾选维护模式。

域名栏下输入该站域名。

端口栏将80改为443 勾选SSL和HTTP2(若不开启HTTPS则无需这步)。

SSL栏下填入证书和密钥(若不开启HTTPS则无需这步)。

PHP服务设置

在内容栏下创建PHP 7.3 FastCGI。

展开PHP 7.3 FPM,选择Dynamic或者On-demand,按需填写最大进程数。

Dynamic: 常驻内存(访问量大,需要快速响应的站点)
On-demand: 按需创建进程(访问量小的站点或工具类如phpmyadmin)
配置最小,最大进程数量,每个进程占用内存大小为下方配置的memory_limit大小,
控制整个服务器的php进程数 * memory_limit 总量小于服务器总内存的65%

展开PHP,在php.ini的值中输入如下内容。

open_basedir = /srv/网站目录/:/tmp/:/var/tmp/:/proc/;
upload_max_filesize = 64m;
post_max_size = 65m;
memory_limit = 32m

注意文件夹名要与当前网站目录一致,内存限制根据需要可适当修改。

mysql数据库配置

在MySQL栏下点击创建数据库、新建用户并赋予用户权限。记录数据库名、用户名和密码。

NGINX配置

高级-自定义配置,填入如下内容。

include /etc/nginx.custom.confs/ssl.conf;
include /etc/nginx.custom.confs/defaults.conf;

WordPress额外设置

高级-自定义配置

location / {
    try_files $uri $uri/ /index.php?$args;
}

该规则可用于配置WordPress伪静态功能,若不添加则会导致部分页面返回404错误。

当网页响应头(cookie等)过大时,nginx会返回413、400、414错误,可以1k为单位适当增加client_header_buffer_size。

KodExplorer额外设置

KodExplorer是一个基于WEB的文件管理器。
KodExplorer无需绑定新建、绑定数据库。
解决KodExplorer的php报错问题

php库缺失 curl
php库缺失 mb_string
须开启php GD库,否则验证码、缩略图使用将不正常

输入如下命令,安装php的curl、mb_string、gd库并重启php服务。

sudo apt-get install php7.3-curl php7.3-mbstring php7.3-gd -y
sudo service php7.3-fpm restart

重启NGINX

完成所有配置后重启NGINX服务确保其生效

sudo service nginx restart

七、重定向设置

http -> https (HSTS)

网站-创建网站Sys_Https。

域名列表填写需要进行HSTS的域名, 若不填写则全局HSTS。

高级-自定义配置 输入如下内容

rewrite ^(.*) https://$host$1 permanent;

net -> com(部分子域名重定向)

网站-创建网站Sys_DomainRedirection。

端口栏处将80改为443,勾选SSL和HTTP2(若不配置HTTPS无需此步)。

SSL栏下填入证书、密钥(若不配置HTTPS无需此步)。

高级-自定义配置,输入如下内容(按需填写)

if ( $host = 'test1.example.net' ) {
    rewrite ^/(.*)$ $scheme://test1.example.com/$1 permanent;
}

if ( $host = 'test2.example.net' ) {
    rewrite ^/(.*)$ $scheme://test2.example.com/$1 permanent;
}

if ( $host = 'www.example.net' ) {
    rewrite ^/(.*)$ $scheme://www.example.com/$1 permanent;
}

if ( $host = 'example.net' ) {
    rewrite ^/(.*)$ $scheme://example.com/$1 permanent;
}

上述内容将test1、test2、www和根域名进行了net->com重定向,填写时请根据实际需要增减或者修改。如果域名证书同时包括了重定向的域名,可以将规则直接写在站点本身的规则列表里,而无需另建一个用于重定向的网站(例如:Sys_DomainRedirection)

net -> com(泛域名重定向)

网站-创建网站Sys_DomainRedirection。

端口栏将80改为443,勾选SSL和HTTP2(若不配置HTTPS无需此步)。

SSL栏下填入证书、密钥(若不配置HTTPS无需此步)。

域名 输入如下两个域名

~^(?<subdomain>.+).example.net
example.net

高级-自定义配置 输入如下内容

if ( $subdomain = "" ) {
    set $subdomain "www";
}
rewrite ^/(.*)$ $scheme://$subdomain.example.com/$1 permanent;

@ -> www(根域名跳转www域名)

打开网站-www所在网站

域名栏目下,同时填写www域名和根域名。

高级-自定义配置 追加如下内容。

if ( $host = "example.com" ) {
    rewrite ^/(.*)$ $scheme://www.example.com/$1 permanent;
}

www -> @(www域名跳转根域名)

网站-@所在网站 高级-自定义配置 追加如下内容

if ( $host = "www.example.com" ) {
    rewrite ^/(.*)$ $scheme://example.com/$1 permanent;
}

屏蔽未使用域名

网站-创建网站Sys_ErrorDomain。

域名-输入如下域名

*.example.com

端口栏将80改为443,勾选SSL和HTTP2(若不配置HTTPS无需此步)。

SSL栏下填入证书、密钥(若不配置HTTPS无需此步)。

屏蔽未使用域名是指解决将*.example.com解析到服务器后任意xxx.example.com都可打开网站的问题。

点赞
  1. Linc说道:
    Google Chrome Windows 10

    Hey I've got to say thank you for bringing this tech to the US and the world. We really appreciate your contribution, again, thanks for making the world a better place, Mr. hanada. :)

    1. Hanada说道:
      Google Chrome Android 8.0.0

      你说你?呢? :yinxian:

      1. Linc说道:
        Google Chrome Windows 10

        Hey dude this tech is way beyond our time. I think you are the Einstein of computer science and plz plz dont be this humble dude!

        1. Hanada说道:
          Google Chrome Android 8.0.0

          :leng:

发表评论

电子邮件地址不会被公开。必填项已用 * 标注