ubuntu 18.04 安装 mysql, tomcat, n

2018-09-15  本文已影响0人  DAI_WEI

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

安装 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 来发布。

参考文档

上一篇下一篇

猜你喜欢

热点阅读