ubuntu 18.04 安装 mysql, tomcat, nginx 步骤

最近在阿里云上申请了一台服务器,重新搭建了一遍环境,顺便记录一下过程。

安装 mysql 5.7

安装 mysql 服务

首先用 apt 安装。

sudo apt update
sudo apt install mysql-server

基本设置

然后进行安全配置。

sudo mysql_secure_installation

用户和权限设置

下面进行权限设置。
首先直接输入 mysql 连接

sudo mysql

检查一下当前的用户认证方法

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

可以看到现在 root 用户认证方式是auth_socket,具体是什么意思不知道,但现在这个方式在登陆时是不需要输入密码的。
我们把它改成用密码登陆,替换下面语句中的 password 为需要的密码,然后 flush 使设置生效。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

再次查询认证方式,发现 plugin 已经变成和其他行一样了。

SELECT user,authentication_string,plugin,host FROM mysql.user;

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

这时候 exit 然后重新用 mysql 连接,已经无法登陆了,需要指定用密码方式:

mysql -u root -p

下面来建立一个新用户,让他可以从远程进行连接。先用下面的语句设置用户名和密码,@ 后面的 % 表示可以从任意地址发起连接。

CREATE USER 'sammy'@'%' IDENTIFIED BY 'password';

然后给他授权,这里简单粗暴把所有权限都给了,为了安全考虑生产上还是慎重一些。

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'%' WITH GRANT OPTION;

这样用户就设置好了。

网络设置

用 navicat 试一下从远程进行连接,会报 10038 错误,提示你 Can't connect to MySQL server on xx.xx.xx.xx,这里还需要改两个地方。
编辑下面的文件

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

其中有一行

bind-address  = 127.0.0.1

表示默认只监听本机的连接。这里需要改成

bind-address  = 0.0.0.0

保存文件后重启服务。

sudo systemctl restart mysql

这时候发现还是无法连接,因为防火墙还没开。需要在阿里云控制台设置防火墙。
先进到实例页面,点右边的管理。



然后左边菜单进入本实例安全组。



在操作下面点配置规则

右上角添加安全组规则,然后增加这样一条

可以顺便把8080 也给加了,一会儿 tomcat 也要用到,加好以后会多出这样两条规则。



这样就设置完成了,现在用 navicat 就可以正常从远程连接了。

安装 tomcat

升级 apt 并安装 java 环境。

sudo apt update
sudo apt install default-jdk

创建 tomcat 用户

sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

第二行的 -s /bin/false 用来阻止用户登陆该账户。这个账户只用来运行 tomcat,以后是不需要登陆操作的。

安装 tomcat

这里安装 9.0 版本的 tomcat,先要去下载页面获得下载地址,选择好镜像地址后右键点下面 tar.gz 复制链接地址即可。
切换临时目录并下载,这里把下载地址替换成最新获得的。

cd /tmp
curl -O http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.tar.gz

然后将文件解压到安装目录。

sudo mkdir /opt/tomcat
sudo tar xzvf apache-tomcat-9*tar.gz -C /opt/tomcat --strip-components=1

修改文件权限

切换目录。

cd /opt/tomcat

修改 conf 目录的用户组。

sudo chgrp -R tomcat /opt/tomcat

赋予 tomcat 用户组对整个 conf 目录的 read 权限以及该目录的执行权限

sudo chmod -R g+r conf
sudo chmod g+x conf

修改 webappsworktemplogs 的用户

sudo chown -R tomcat webapps/ work/ temp/ logs/

文件权限设置完成,下面创建服务。

创建服务

首先要知道 JAVA_HOME 的路径,输入下面命令获得。

sudo update-java-alternatives -l

OUTPUT
java-1.11.0-openjdk-amd64      1101       /usr/lib/jvm/java-1.11.0-openjdk-amd64

后面的 /usr/lib/jvm/java-1.11.0-openjdk-amd64 就是 JAVA_HOME 的路径,记住它,后面要用。
下面在 /etc/systemd/system 目录中创建 tomcat.service 文件。

sudo vi /etc/systemd/system/tomcat.service

文件内容如下,主要要把 JAVA_HOME 后面的值改成刚才获得的路径。

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

运行下面的命令使文件生效:

sudo systemctl daemon-reload

然后启动服务,看一下状态。

sudo systemctl start tomcat
sudo systemctl status tomcat

这时候访问 http://ip:8080 应该就可以打开页面了。8080 防火墙已经在上面安装 mysql 时顺便打开了。
设置自启动:

sudo systemctl enable tomcat

管理页面访问控制

现在还不能进到应用管理的页面。需要修改下面的配置文件。

sudo vi /opt/tomcat/conf/tomcat-users.xml

在里面设置一个用户名和密码,角色为 manager-guiadmin-gui

<tomcat-users . . .>
    <user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

保存文件。
然后取消本地访问限制,需要编辑下面两个文件,分别对应两个应用:

sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml
sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

把文件中的 <valve> 标签注释掉。

<Context antiResourceLocking="false" privileged="true" >
  <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context>

保存文件然后重启 tomcat 服务。

sudo systemctl restart tomcat

这样就可以进到应用管理添加应用了。

安装 nginx

安装

还是用 apt 安装,如果之前没有更新的话记得更新。

sudo apt update
sudo apt install nginx

这时候如果之前在新申请服务器时打开了 80 端口访问的话已经可以访问到 index 页面了。

反向代理

我在这里要部署的是一个 angular 应用和一个 spring 开发的后端应用,前端应用通过 nginx 访问,后端通过路径 /api 区分,反向代理到8080 端口,由 tomcat 处理。这里需要配置下面的文件:

sudo vi /etc/nginx/sites-enabled/default

内容:

server {
        # 监听 80 端口
        listen 80 default_server;
        listen [::]:80 default_server;
        # 根目录
        root /var/www/html;
        # 如果要访问的资源存在则返回资源,否则路由到 index.html,这条是由 angular 的特性决定的,除了静态文件以外的路由都交给 angular
        try_files $uri $uri/ /index.html;

        server_name _;
        # 对 /api url 设置反向代理
        location /api {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # 这里要把头部信息加上,否则在后端拿不到正确的数据
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # 转发给 8080 端口
                proxy_pass http://127.0.0.1:8080/api;
        }
}

小结

至此整个框架就安装完成了,只要把项目打包发布即可。发布时要注意 tomcat 应用要发布到 /api context, 简单的做法是把打好的 war 包重命名为 api.war 然后用 app manager 来发布。

参考文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容