在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虚拟主机面板使用的详细教程。

由于Ajenti 2功能不完备,无法使用Ajenti V,故下述Ajenti均指Ajenti1.x,Ajenti1.x虽然官方已基本不再维护,但模块化的设计使其依然可以直接使用最新版本的组件来建立WEB环境。(目前面板支持主线版本的NGINX、PHP7.3以及MySQL5.7)

一、前期部署流程

源更新

更新并重启

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

如果是国内主机,建议在添加源后使用USTC代理来解决连接过慢的问题

find /etc/apt/sources.list.d/ -type f -name "*.list" -exec  sed  -i.bak -r  's#deb(-src)?\s*http(s)?://ppa.launchpad.net#deb\1 https://launchpad.proxy.ustclug.org#ig' {} \;

更新

sudo apt-get update

安装解压工具unzip和文件传输工具lrzsz以及文件下载工具wget

sudo apt-get install unzip lrzsz wget -y

安装Ajenti

Ajenti官方的自动安装脚本在Ubuntu 18.04 会因缺少依赖会安装失败,需要安装依赖项(Ubuntu 18.04必须安装,如果安装时出现依赖问题请按照提示补充需要的依赖项)

wget http://launchpadlibrarian.net/333146932/python-imaging_4.1.1-3build2_all.deb
sudo dpkg -i python-imaging_4.1.1-3build2_all.deb

如果下载太慢可以使用我自己托管的仓库来下这个依赖

wget https://repo.hanada.info/ubuntu/pool/python-imaging_4.1.1-3build2_all.deb
sudo dpkg -i python-imaging_4.1.1-3build2_all.deb

导入Ajenti存储库GPG密钥

wget http://repo.ajenti.org/debian/key -O- | sudo apt-key add -

添加Ajenti存储库

sudo echo "deb http://repo.ajenti.org/debian main main ubuntu" > /etc/apt/sources.list.d/ajenti.list
sudo apt-get update

安装Ajenti

apt install ajenti -y

安装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

请确保安全组、防火墙的策略已开放TCP的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; 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使用域名访问。

新建控制台站点

左侧网站-新建站点。

在综合信息栏下,取消勾选维护模式,输入放置的目录,然后点创建目录。

在域名栏下,输入作为Ajenti面板访问的域名(不要使用根域名或www域名,此域名仅用于登录服务器管理面板)。

在端口栏下,将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」项取消勾选。

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

完成上述步骤后可安全组、防火墙等关闭TCP8000端口。

重启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

如果重启NGINX后无法访问该域名,请检查域名解析是否生效,若解析已生效,可以用nignx -t检查NGINX配置是否出错,防火墙、安全组等是否已放通80、443端口。确实暂时无法找到错误原因的,可以编辑/etc/ajenti/config.json,将bind下的 "host": "/var/run/ajenti.sock", 改回 "host": "0.0.0.0", 将ssl下的 "enable": false, 改为 "enable": true,。保存后重启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域名跳转根域名)

网站[email protected]所在网站 高级-自定义配置 追加如下内容

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都可打开网站的问题。

点赞

发表评论

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