
专注Android应用研发,性能优化,移动安全等领域。
Mono 是一个平台,基于 ECMA/ISO 标准,用于开发和运行跨平台应用。它是微软的 .NET 框架的免费和开源实现。 本文主要涉及如何在 Ubuntu 20.04 上安装 Mono。 一、 前提条件 下面的指令假定你以 root 或者其他 sudo 权限身份登录系统。 二、 在 Ubuntu 上安装 Mono Mono 在标准的 Ubuntu 软件源仓库中不可用。我们将从 Mono 官方源仓库安装 Mono。这是一个很简单直接的过程,只需要花费几分钟。 01.开始安装必要的软件包: sudo apt update sudo apt install dirmngr gnupg apt-transport-https ca-certificates software-properties-common 02.输入下面的命令,导入源仓库的 GPG key: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF 输出应该像下面这样: gpg: key A6A19B38D3D831EF: public key "Xamarin Public Jenkins (auto-signing) <releng@xamarin.com>" imported gpg: Total number processed: 1 gpg: imported: 1 03.添加 Mono 源仓库到你的系统源列表: sudo apt-add-repository 'deb https://download.mono-project.com/repo/ubuntu stable-bionic main' 04.安装 Mono: sudo apt install mono-complete mono-complete是一个元软件包,它会安装你用来进行 Mono 开发所需要的所有软件包,包括运行环境,开发工具和所有的类库。 05.安装将会花费一些时间。一旦完成,输入下面的命令,打印 Mono 版本,验证 Mono 安装结果: mono --version 就在写文章的时候,Mono 最新稳定版本是 6.8.0.123。 Mono JIT compiler version 6.8.0.123 (tarball Tue May 12 15:11:57 UTC 2020) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug Interpreter: yes LLVM: yes(610) Suspend: hybrid GC: sgen (concurrent by default) 就这些,你已经在你的 Ubuntu 机器上成功安装了 Mono,并且你可以开始使用它了。 三、 Mono 入门 想要验证所有设置都正常,我们将会构建一个 Hello World 程序,它将会打印『hello world』信息。 打开你的文本编辑器,并且创建一个名字为hello.cs的文件,内容如下: using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine ("Hello World!"); } } 使用csc编译器构建程序: csc hello.cs 上面的这个命令将会构建出一个可执行程序,名称为:hello.exe。 运行这个可执行程序: mono hello.exe 输出将会像下面这样: Hello, World 想要通过输入程序名字来运行程序,你需要使得文件可执行: chmod +x hello.exe 现在你可以运行hello.exe,输入: ./hello.exe 四、总结 在 Ubuntu 20.04 上安装 Mono 是一个相对简单直接的过程,它只会花费你一点时间。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-use-composer-on-ubuntu-20-04/ Composer 是一个 PHP 依赖管理器(类似于 Node.js 的 npm,或者 Python 的 pip)。 Composer 将会拉取你的项目所依赖的所有 PHP 软件包,并且为你管理它们。它被所有现代化的 PHP 框架和平台所使用,例如: Laravel, Symfony, Drupal, 和 Magento 2。 这篇指南解释如何在 Ubuntu 20.04 上安装和使用 Composer。 一、在 Ubuntu 上安装 PHP Composer 在安装 Composer 之前,确保你已经在你的系统上安装了必要的依赖软件包: sudo apt update sudo apt install wget php-cli php-zip unzip Composer 提供了一个使用 PHP 编写的安装器,我们可以用来安装 Composer。 使用wget来下载这个安装器: wget -O composer-setup.php https://getcomposer.org/installer 上面这个命令将会将文件在当前文件夹下保存为composer-setup.php。 Composer 是一个简单的 CLI 应用程序文件,并且既可以被全局安装,也可以作为项目的一部分进行安装。全局安装需要 sudo 权限。 想要在系统范围内全局安装 Composer,将会对所有用户可用,只需要将文件放到系统 PATH 路径下。运行下面的命令将 Composer 安装到 /usr/local/bin目录: sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer 输出: All settings correct for using Composer Downloading... Composer (version 1.10.7) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer 现在你可以在你的终端通过运行composer来使用 Composer。 想要在本地项目安装 composer,输入: sudo php composer-setup.php --install-dir=/path/to/project 这将会在你的项目根目录下下载一个名为composer.phar的文件。想要使用 Composer ,切换到项目目录,并且运行php composer.phar 当一个新的 Composer 版本可用时,你可以使用下面的命令来升级: sudo composer self-update 二、Composer 入门 现在 Composer 已经在你的 Ubuntu 系统上被安装好了,我们一起看看如何使用 Composer 去创建一个 PHP 项目。 第一步就是去创建项目根目录,并且切换到该目录: mkdir ~/my-first-composer-project cd ~/my-first-composer-project 在这个例子中,我们将会使用一个叫做carbon的 PHP 软件包来创建一个示例应用,并且打印当前时间。 运行下面的命令初始化一个新的 Composer 项目,并且安装 carbon 软件包: composer require nesbot/carbon 输出: Using version ^2.35 for nesbot/carbon ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 5 installs, 0 updates, 0 removals - Installing symfony/translation-contracts (v2.1.2): Downloading (100%) - Installing symfony/polyfill-php80 (v1.17.0): Downloading (100%) - Installing symfony/polyfill-mbstring (v1.17.0): Downloading (100%) - Installing symfony/translation (v5.1.2): Downloading (100%) - Installing nesbot/carbon (2.35.0): Downloading (100%) Writing lock file Generating autoload files 5 packages you are using are looking for funding. Use the `composer fund` command to find out more! 就像输出所显示的, Composer 创建了 composer.json文件,下载,并且安装了 carbon 和所有的依赖软件包。 如果你列出你的项目目录,你将会看到它包含两个文件composer.json和composer.lock,并且有一个vendor目录。 ls -l -rw-rw-r--. 1 vagrant vagrant 60 Mar 27 18:05 composer.json -rw-rw-r--. 1 vagrant vagrant 11135 Mar 27 18:06 composer.lock drwxrwxr-x. 6 vagrant vagrant 82 Mar 27 18:06 vendor vendor 是存放项目依赖软件包的目录 composer.lock是一个文件,保留了所有已经安装的软件包和他们的版本号,锁定项目到指定的版本。 composer.json是用来描述 PHP 项目,包括 PHP 依赖和其他元数据的文件。 所有通过 Composer 可以安装的 PHP 软件包都列在 [Packagist](https://packagist.org/)。 Composer 拥有自动加载的能力,它允许你使用 PHP 类,而不用使用require和include声明。 创建一个名为testing.php的测试文件,并且添加下面的代码: <?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; printf("Now: %s", Carbon::now()); 让我们一行一行分析代码。 /vendor/autoload.php 文件由 Composer 自动生成,并且可以自动加载所有的库。 下一行创建Carbon的关联,并且最后使用 Carbon 的now方法打印出当前的时间。 输入下面的命令,运行脚本: php testing.php 输出将会像下面这样: Now: 2020-06-17 20:41:04 稍后,如果你想升级你的 PHP 软件包,你只需简单运行: composer update 上面的这个命令,我们会检查所有已经安装的软件包是否有更新的版本,并且,如果有更新的版本,Composer 将会升级软件包。 三、总结 我们已经向你展示如何在 Ubuntu 20.04 上安装 Composer,并且如何使用它创建一个基础的 PHP 项目。 想要寻找更多关于 Composer 的信息,请浏览 Composer 官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-r-on-ubuntu-20-04/ R 是一门开源编程语言和自由的环境,主要用于统计分析、绘图。它由 R 基金会支持,主要用于统计分析。它主要被数据统计和分析师们用来开发统计软件,并用来进行数据分析。 这篇文章主要描述如何在 Ubuntu 20.04 上安装 R。 一、前提条件 在继续这篇指南之前,请确保你满足下面的前提条件: 你的系统拥有至少 1G RAM. 否则,请创建 swap 文件。 你需要以有 sudo 权限的用户身份登录。 二、在 Ubuntu 上安装 R 包含在默认的 Ubuntu 软件源中的 R 软件包经常都是过时的。我们将会从CRAN软件源中安装 R。 想要在 Ubuntu 20.04 上安装 R,按照下面的步骤: 01.安装必要的软件包,添加一个新的软件源: sudo apt install dirmngr gnupg apt-transport-https ca-certificates software-properties-common 02.将 CRAN 软件源 添加到你的系统源列表: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' 03.输入下面的命令,安装 R: sudo apt install r-base 04.安装过程会持续几分钟完成。一旦完成,打印 R 的版本,验证它是否安装成功: R --version 输出: R version 4.0.1 (2020-06-06) -- "See Things Now" Copyright (C) 2020 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) ... 就这些。R 已经在你的 Ubuntu 机器上被安装好了,你可以开始使用它了。 三、编译 R 软件包 R 广受欢迎的一个主要原因之一就是通过the Comprehensive R Archive Network (CRAN)提供了很多的软件包。 想要编译 R 软件包,你需要安装build-essential软件包: sudo apt install build-essential 为了演示,我们将会安装一个名为stringr的软件包,它提供了通常字符串操作的快速实现。 当你以 root 身份运行的时候,软件包将会被全局安装,并且对所有的系统用户可用。如果你不使用 sudo 启动 R 时,这将仅仅对当前用户有效。 打开 R 终端: R 输出: > 安装stringr软件包,输入: install.packages("stringr") 安装将会花一些时间。一旦完成,输入下面的命令,加载这个库: library(stringr) 下一步,创建一个简单的字符串, 命令为 'tutorial': tutorial <- c("How", "to", "Install", "R", "on", "Ubuntu", "20.04") 运行下面的函数,将会打印出每个字符串的长度: str_length(tutorial) [1] 3 2 7 1 2 6 5 你可以在 CRAN 软件包页面找到更多的 R 软件包,并且通过install.packages()安装他们。 四、总结 我们已经向你展示了,如何在 Ubuntu 20.04 上安装 R,以及 如何编译安装 R 软件包。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-skype-on-ubuntu-20-04/ Skype 是世界上最流行的社交应用之一。它是一个跨平台应用,在 Windows,Linux 和 macOS 上都可用。通过 Skype,你可以进行免费的在线语音,视频,和国际通话服务。 Skype 不是开源应用,并且它不被包含在标准的 Ubuntu 软件源中。 这个指南显示了在 Ubuntu 20.04 上安装 Skype 的两种方式。 Skype 可以通过Snapcraft 商店安装,或者从 Skype 软件源中安装。 选择一个最适合你的安装方式。 一、以 Snap 软件包的方式安装 Skype Skype snap 软件包由微软进行发布并且维护。 Snaps 是自包含软件包,它包含了运行所包含的所有依赖。Snap 软件包可以很容易并且安全地升级。不像标准的 deb 软件包,snaps 占用更多的磁盘空间以及需要更长的应用启动时间。 Snap 软件包可以从命令行,也可以从 Ubuntu 软件应用中心进行安装。 想要安装 Skype snap,打开你的终端(Ctrl+Alt+T),并且运行下面的命令: sudo snap install skype --classic 就这样。你已经在你的 Ubuntu 机器上安装好 Skype,并且可以开始使用它了。 如果你不喜欢命令行,打开 Ubuntu 软件中心,搜索"Skype",并且安装这个应用: 不管什么时候新版本发布,Skype 软件包都可以在后台自动升级。 二、使用 apt 安装 Skype Skype 在 Microsoft 官方 Apt 软件源中可用。想要安装它,参考下面的步骤: 01.打开你的终端,并且使用 wget 下载最新版 Skype 的.deb 软件包。 wget https://go.skype.com/skypeforlinux-64.deb 02.一旦下载完成,以 sudo 用户身份运行下面的命令,安装 Skype: sudo apt install ./skypeforlinux-64.deb 你将会被提示输入你的密码。 在安装过程中, Skype 官方软件源将会被安装到你的系统。当新的版本发布时,你可以通过你的桌面标准软件升级工具或者在终端中输入下面的命令,来进行升级: sudo apt update sudo apt upgrade 三、启动 Skype 在搜索栏中输入"Skype",并且点击图标启动这个应用。 当你第一次启动 Skype 时,一个类似下面的窗口将会出现: 从这里开始,你可以使用你的微软账户登录 Skype,开始聊天,和你的朋友和家人一起交谈。 四、总结 我们已经向你展示了如何在 Ubuntu 20.04 桌面版上 安装 Skype。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-configure-redis-on-ubuntu-20-04/ Redis 是一个开源的在内存存储键值对数据的存储程序。它可以被用作数据库,缓存,信息暂存,并且支持各种数据结构,例如:字符串,哈希值,列表,集合等等。 Redis 通过 Redis Sentinel 和 Redis 集群中多个 Redis 节点的自动分块处理,提供了高可用性。 这篇指南描述了如何在 Ubuntu 20.04 上安装和配置 Redis。 一、在 Ubuntu 20.04 上安装 Redis 在 Ubuntu 上安装 Redis 非常简单直接。 Redis 5.0 被包含在默认的 Ubuntu 20.04 软件源中。想要安装它,以 root 或者其他 sudo 身份运行下面的命令: sudo apt update sudo apt install redis-server 一旦安装完成,Redis 服务将会自动启动。想要检查服务的状态,输入下面的命令: sudo systemctl status redis-server 你应该看到下面这些: ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-06-06 20:03:08 UTC; 10s ago ... 如果你的服务器上禁用 IPv6,那么 Redis 服务将会启动失败。 就这些。你已经在你的 Ubuntu 20.04 上安装并运行了 Redis。 二、配置 Redis 远程访问 默认情况下,Redis 不允许远程连接。你仅仅只能从127.0.0.1(localhost)连接 Redis 服务器 - Redis 服务器正在运行的机器上。 如果你正在使用单机,数据库也同样在这台机器上,你不需要启用远程访问。 想要配置 Redis 来接受远程访问,使用你的文本编辑器打开 Redis 配置文件: sudo nano /etc/redis.conf 定位到以bind 127.0.0.1 ::1开头的一行,并且取消它的注释: # bind 0.0.0.0 ::1 如果你的服务器有局域网 IP,并且你想要 Redis 从局域网可以访问 Redis,在这一行后面加上服务器局域网 IP 地址。 保存这个文件,并且重启 Redis 服务,使应用生效: sudo systemctl restart redis-server 使用下面的命令来验证 Redis 服务器正在监听端口6379: ss -an | grep 6379 你应该能看到类似下面的信息: tcp LISTEN 0 511 0.0.0.0:6379 0.0.0.0:* tcp LISTEN 0 511 [::]:6379 [::]:* 下一步,你将需要配置你的防火墙,允许网络流量通过 TCP 端口6379。 通常你想要允许从一个指定 IP 地址或者一个指定 IP 范围来访问 Redis 服务器。例如,想要允许从192.168.121.0/24的连接,运行下面的命令: sudo ufw allow proto tcp from 192.168.121.0/24 to any port 6379 确保你的防火墙被配置仅仅接受来自受信任 IP 的连接。 此时,你应该可以从远程位置通过 TCP 连接到 Redis 的 6379 端口。 想要验证所有设置都设置好了,你可以尝试使用redis-cli从你的远程机器上 ping 一下 Redis 服务器。 redis-cli -h <REDIS_IP_ADDRESS> ping 这个命令将会返回一个响应:PONG PONG 三、总结 我们已经向你展示如何在 Ubuntu 20.04 上安装 Redis。想要了解更多关于如何使用 Redis 的信息,请访问它们的官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-php-on-ubuntu-20.04/ PHP 是世界上使用广泛的服务端编程语言之一。很多著名的 CMS 和框架,例如 WordPress, Magento, 和 Laravel 都是基于 PHP 构建的。 这篇指南覆盖了在 Ubuntu 20.04 上安装 PHP 以及 PHP 和 Nginx,Apache 集成的必要步骤。 在写作的时候,默认的 Ubuntu 20.04 软件源上包含了 PHP 7.4 版本。我们将会向你展示如何安装之前的 PHP 版本。在选择安装哪一个版本的 PHP,请确认你的应用支持它。 一、安装 PHP 7.4,配合 Apache 如果你正在使用 Apache 作为你的网络服务器,运行下面的命令来安装 PHP 和 Apache PHP 模块: sudo apt update sudo apt install php libapache2-mod-php 一旦软件包安装好了,重启 Apache,重新加载 PHP 模块。 sudo systemctl restart apache2 二、安装 PHP 7.4,配合 Nginx 不像 Apache,Nginx 没有对处理 PHP 文件的内建支持。我们将会使用 PHP-FPM (“fastCGI process manager”) 来处理 PHP 文件。 运行下面的命令,来安装 PHP 和 PHP FPM 软件包: sudo apt update sudo apt install php-fpm 一旦安装完成,FPM 服务将会自动启动。想要检查服务状态,运行: systemctl status php7.4-fpm 输出: ● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-09 19:07:05 UTC; 37s ago 现在你可以编辑 Nginx 服务器配置区块,并且添加下面的内容,以便 Nginx 可以处理 PHP 文件: server { # . . . other code location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:q; } } 不要忘记重启 Nginx 服务器,以便新的配置可以起作用: sudo systemctl restart nginx 三、安装 PHP 扩展 PHP 扩展被编译成库文件,用来扩展 PHP 核心功能。扩展通常作为软件包,并且可以很容易地通过apt来进行安装: sudo apt install php-[extname] 例如,想要安装 MySQL 和 GD 扩展,你需要运行下面的命令: sudo apt install php-mysql php-gd 在安装一个新的 PHP 扩展之后,依赖于你的设置,不要忘记去重启 Apache 或者 PHP FPM 服务。 四、测试 PHP 处理 想要测试服务器是否被正确用来处理 PHP,创建一个新的文件名,命名为info.php,放在/var/www/html目录下,文件内容如下: <?php phpinfo(); 保存你的文件,打开你的浏览器,浏览http://your_server_ip/info.php。 你将会看到类似下图,展示关于你的 PHP 配置的信息: {{< figure src="/img/linuxize/ubuntu/phpinfo-ubuntu.webp" link="https://cloud.tencent.com/act/cps/redirect?redirect=1059&cps_key=7ad172f808f30965a01c05887137e4d8&from=console" target="blank" >}} 五、安装前面的 PHP 版本 Ondřej Surý, 一个 Debian 开发者,维护了一个包含多个 PHP 版本的软件源。想要启用这个软件源,运行: sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php 现在你可以通过在软件包后面添加版本号来安装任何版本的 PHP: sudo apt install php[version] 例如,想要安装 PHP 7.1 和 几个通用的 PHP 模块,你可以运行: sudo apt install php7.1 php7.1-common php7.1-opcache php7.1-mcrypt php7.1-cli php7.1-gd php7.1-curl php7.1-mysql 六、总结 在 Ubuntu 20.04 上安装 PHP 是一个简单直接的任务。所有你需要的就是使用apt来安装软件包。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-gcc-on-ubuntu-20-04/ GNU 编译器集合是一系列用于语言开发的编译器和库的集合,包括: C, C++, Objective-C, Fortran, Ada, Go, and D等编程语言。很多开源项目,包括 Linux kernel 和 GNU 工具,都是使用 GCC 进行编译的。 本文描述如何在 Ubuntu 20.04 上安装 GCC。 一、在 Ubuntu 20.04 上安装 GCC 默认的 Ubuntu 软件源包含了一个软件包组,名称为 "build-essential",它包含了 GNU 编辑器集合,GNU 调试器,和其他编译软件所必需的开发库和工具。 想要安装开发工具软件包,以 拥有 sudo 权限用户身份或者 root 身份运行下面的命令: sudo apt update sudo apt install build-essential 这个命令将会安装一系列软件包,包括gcc,g++,和make。 你可能还想安装关于如何使用 GNU/Linux开发的手册。 sudo apt-get install manpages-dev 通过运行下面的命令,打印 GCC 版本,来验证 GCC 编译器是否被成功地安装。 gcc --version 在 Ubuntu 20.04 软件源中 GCC 的默认可用版本号为9.3.0: gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 就这些。GCC 已经在你的 Ubuntu 系统上安装好了,你可以开始使用它了。 二、编译一个 Hello World 实例 使用 GCC 编译一个基本的 C 或者 C++ 程序非常简单。打开你的文本编辑器,并且创建下面的文件: nano hello.c #include <stdio.h> int main() { printf ("Hello World!\n"); return 0; } 保存文件,并且将它编译成可执行文件,运行: gcc hello.c -o hello 这将在你运行命令的同一个目录下创建一个二进制文件,名称为"hello"。 运行这个hell0程序: ./hello 程序应该打印: Hello World! 三、安装多个 GCC 版本 这一节提供一些指令,关于如何在 Ubuntu 20.04 上安装和使用多个版本的 GCC。更新的 GCC 编译器包含一些新函数以及优化改进。 在写作本文的时候,Ubuntu 源仓库包含几个 GCC 版本,从7.x.x到10.x.x。在写作的同时,最新的版本是10.1.0。 在下面的例子中,我们将会安装最新的三个版本 GCC 和 G++: 输入下面的命令,安装想要的 GCC 和 G++ : sudo apt install gcc-8 g++-8 gcc-9 g++-9 gcc-10 g++-10 下面的命令配置每一个版本,并且设置了优先级。默认的版本是拥有最高优先级的那个,在我们的场景中是gcc-10。 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8 以后,如果你想修改默认的版本,使用update-alternatives命令: sudo update-alternatives --config gcc 输出: There are 3 choices for the alternative gcc (providing /usr/bin/gcc). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/bin/gcc-10 100 auto mode 1 /usr/bin/gcc-10 100 manual mode 2 /usr/bin/gcc-8 80 manual mode 3 /usr/bin/gcc-9 90 manual mode Press <enter> to keep the current choice[*], or type selection number: 你将会被展示一系列已经安装在你的 Ubuntu 系统上的 GCC 版本。输入你想设置为默认的 GCC 版本,并且按回车Enter。 这个命令将会创建符号链接到指定版本的 GCC 和 G++。 四、总结 我们已经向你演示如何在 Ubuntu 20.04 上如何安装 GCC。现在你可以浏览官方 GCC 文档页面,并且学习如何使用 GCC 和 G++ 来编译你的 C 和 C++ 程序。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-virtualbox-on-ubuntu-20-04/ VirtualBox 是一个开源的,跨平台的虚拟化软件,它允许你同时运行多个虚拟机。通常,VirtualBox 被桌面用户用来做测试和开发环境。 在这个指南中,我们将会向你展示如何在 Ubuntu 20.04 上安装 VirtualBox: 从标准的 Ubuntu 软件源 从 Oracle 软件源 VirtualBox 软件包在 Ubuntu multiverse 软件源可用,但是可能不是最新的版本。 Oracle 软件源一直都包含最新发布的版本。 一、从 Ubuntu 软件源中安装 VirtualBox 从 Ubuntu 软件源中安装 VirtualBox 非常的简单直接。 以 root 或者其他有 sudo 权限的用户身份运行下面的命令,更新软件包索引,并且安装 VirtualBox 和 扩展增强包: sudo apt update sudo apt install virtualbox virtualbox-ext-pack 就这些! 你已经成功地在你的 Ubuntu 机器上安装好了 VirtualBox,你可以开始使用它了。 二、从 Oracle 软件源中安装 VirtualBox 在写这篇文章的时候, VirtualBox 最新的版本是 版本 6.1.x。 想要从 Oracle 软件源中安装 VirtualBox,照着下面的步骤做: 01.使用下面的命令导入 Oracle 公钥: wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - 这些命令都应该输出 OK,这意味着公钥被成功导入,并且该软件源的软件包被认为是可信的。 02.添加 VirtualBox APT 软件源 到你的系统: echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" | \ sudo tee -a /etc/apt/sources.list.d/virtualbox.list $(lsb_release -cs) 打印 Ubuntu 代号。例如,如果你正在使用 Ubuntu version 20.04,这个命令将会打印focal。 03.升级软件包列表并且安装 VirtualBox 最新版本: sudo apt update sudo apt install virtualbox-6.1 2.1、安装 VirtualBox 扩展增强包 VirtualBox 扩展增强包给客户机提供了一些非常有用的功能,比如,虚拟的 USB 2.0,USB 3.0,RDP 支持,图片加密,等等。 下载 扩展增强包文件,输入: wget https://download.virtualbox.org/virtualbox/6.1.8/Oracle_VM_VirtualBox_Extension_Pack-6.1.8.vbox-extpack 确保扩展增强版的版本和 VirtualBox 版本相匹配。 当下载完成,使用下面的命令导入扩展增强包: sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.8.vbox-extpack 你将会被展示 Oracle 协议,并且被提示接受他们的协议和条件: Do you agree to these license terms and conditions (y/n)? 输入y,并且按Enter。一旦安装完成,你将看到下面的输出: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully installed "Oracle VM VirtualBox Extension Pack". 三、启动 VirtualBox VirtualBox 可以通过在终端命令行输入virtualbox,或者点击 VirtualBox 图标。 当你第一次启动 VirtualBox,类似下面的窗口将会出现: 四、总结 我们已经向你展示如何在 Ubuntu 20.04 上安装 VirtualBox。现在你可以创建你的第一个 Windows 或者 Linux 客户机。 想要获取更多关于 VirtualBox 的信息,请浏览官方 VirtualBox 文档页面。 如果你想从命令行管理你的虚拟机,请浏览这篇文章 How to install Vagrant on Ubuntu 20.04 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-enable-ssh-on-ubuntu-20-04/ Secure Shell (SSH) 是一个网络协议,它主要被用来加密客户端和服务端之间的连接。 在客户端和服务端的每一次交互都被加密。 这个教程解释了如何在 Ubuntu 机器上启用 SSH。 启用 SSH 将会允许你远程连接到你的系统,并且执行管理员任务。你将能够通过 scp和sftp安全传输文件。 一、 在 Ubuntu 上启用 SSH 默认情况下,当 Ubuntu 最初被安装的时候,通过 SSH 进行远程访问是不被允许的。在 Ubuntu 上启用 SSH 非常的简单直接。 以 root 或者其他 sudo 用户身份执行下面的步骤,在你的 Ubuntu 系统上安装并且启用 SSH。 01.使用Ctrl+Alt+T打开终端,并且安装openssh-server软件包: sudo apt update sudo apt install openssh-server 当被提示时,输入你的密码并且按 Enter,继续安装。 {{< figure src="/img/linuxize/ubuntu/ubuntu-install-ssh.webp" link="https://cloud.tencent.com/act/cps/redirect?redirect=1059&cps_key=7ad172f808f30965a01c05887137e4d8&from=console" target="blank" >}} 02.一旦安装完成,SSH 服务将会被自动启动。你可以验证 SSH 是否正在运行,输入: sudo systemctl status ssh 输出将会告诉你服务正在运行,并且启用开机启动: ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-06-01 12:34:00 CEST; 9h ago ... 按q返回命令行。 03.Ubuntu 自带一个配置防火墙配置工具,称为 UFW。如果防火墙在你的系统上被启用,请确保打开了 SSH 端口: sudo ufw allow ssh 就这些。现在你可以从任何远程机器上通过 SSH 连接到你的 Ubuntu 系统。Linux 和 macOS 系统默认都安装了 SSH 客户端。想要从一个 Window 机器上连接,使用一个 SSH 客户端,例如:PUTTY。 二、连接到 SSH 服务器 想要在局域网内连接到你的 Ubuntu 机器,以下面的格式输入 ssh 命令,加上用户名和 IP 地址。 ssh username@ip_address 确保你将`username`修改成你自己的用户名,`ip_address`修改成你安装了 SSH 的 Ubuntu 机器的 IP 地址。 如果你不知道你的 IP 地址,你可以使用ip命令轻易地找到它: ip a {{< figure src="/img/linuxize/ubuntu/ubuntu-find-ip-address.webp" link="https://cloud.tencent.com/act/cps/redirect?redirect=1059&cps_key=7ad172f808f30965a01c05887137e4d8&from=console" target="blank" >}} 你可以从输出中看到,系统 IP 地址是10.0.2.15。 一旦你找到 IP 地址,通过运行下面的ssh 命令登录远程机器: ssh linuxize@10.0.2.15 当你第一次连接时,你将看到下面的信息: The authenticity of host '10.0.2.15 (10.0.2.15)' can't be established. ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY. Are you sure you want to continue connecting (yes/no)? 输入yes并且你将会被提示输入你的密码: Warning: Permanently added '10.0.2.15' (ECDSA) to the list of known hosts. linuxize@10.0.2.15's password: 一旦你输入密码,你将会看到默认的 Ubuntu 消息: Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-26-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage ... 现在你可以登录到你的 Ubuntu 机器上。 三、连接到 NAT 后面的 SSH 想要通过互联网连接到你的 Ubuntu 机器,你需要知道你的公网 IP 地址,并且配置你的路由器接收端口22的数据,并且发送它到正在运行 SSH 的 Ubuntu 机器。 想要获取你尝试通过 SSH 连接的机器的公网 IP,在这个机器上访问 URL 地址:https://api.ipify.org。 当设置端口转发时,每一个路由器都有不同的方式来设置端口转发。你应该参考你的路由器文档,关于如何设置端口转发的信息。简单来讲,你应该输入之前设置的 SSH 端口号 22,以及之前服务器的私有 IP 地址。 一旦你找到 IP 地址,配置你的路由器,输入: ssh username@public_ip_address 如果你将你的机器暴露在互联网中,你最好采取一些安全措施。最基础的一个措施就是配置你的路由器接受一个非标准端口的 SSH 流量,并且转发到你运行 SSH 服务的机器的端口22。 你也可以设置 SSH 密钥公钥验证方式,之后你就可以不使用密码就可以连接到你的 Ubuntu 机器上了。 四、在 Ubuntu 上禁用 SSH 想要在你的 Ubuntu 系统上禁用 SSH 服务器,简单停止 SSH 即可,输入: sudo systemctl disable --now ssh 稍后,你可以重新启用,输入: sudo systemctl enable --now ssh 五、总结 我们已经向你展示如何在你的 Ubuntu 20.04 上安装和启用 SSH。 现在你可以登录你的机器,并且通过命令行执行每天的 sysadmin 任务。 如果你管理多个系统,你可以通过将你的所有连接都定义在 SSH 配置文件中,来简化工作流程。修改默认的 SSH 端口将会使得你的系统更安全,减少自动攻击的风险。 想要获取更多如何配置你的 SSH 服务器 的信息,阅读 Ubuntu SSH 配置指南 和 官方 SSH 手册。 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-vagrant-on-ubuntu-20-04/ Vagrant是一个命令行工具,用于构建和管理虚拟开发环境。 默认情况下,Vagrant 在 VirtualBox, Hyper-V, 和 Docker 之上准备环境。支持其他提供者,例如, Libvirt (KVM), VMware and AWS 可以通过 Vagrant 插件系统启用。 Vagrant 通常被开发者用来建立匹配生产环境的开发环境。 这篇文章描述如何在 Ubuntu 20.04 机器上安装 Vagrant。我们将会使用 VirtualBox,Vagrant 默认的提供者。 一、在 Ubuntu 上安装 Vagrant 我们将会在 VirtualBox 的基础上提供虚拟机。 如果 VirtualBox 没有安装在你系统上,你可以运行下面的命令安装它: sudo apt update sudo apt install virtualbox Vagrant 软件包,在 Ubuntu 源仓库中提供,并且不经常更新。我们将会从官方 Vagrant 网站下载并安装最新版的 Vagrant。 在写这篇文章的时候,Vagrant 最新版是 2.2.9。浏览 Vagrant 下载页面,看看有没有 Vagrant 最新版本可用。 使用 wget 下载 Vagrant 软件包: curl -O https://releases.hashicorp.com/vagrant/2.2.9/vagrant_2.2.9_x86_64.deb 一旦下载完成,输入下面的命令安装它: sudo apt install ./vagrant_2.2.9_x86_64.deb 想要验证安装是否成功,运行下面的命令,打印 Vagrant 版本: vagrant --version 输出类似下面这样: Vagrant 2.2.9 二、Vagrant 入门 创建 Vagrant 项目非常简单,在项目根目录下定义个 Vagrantfile。 运行下面的命令,创建文件夹,并且 cd 切换到这个目录: mkdir ~/my-vagrant-project cd ~/my-vagrant-project 下一步,使用vagrant init加上你想使用的盒子,初始化一个新的 Vagrantfile。 盒子就是Vagrant 环境的软件包格式。你可以在 Vagrant box 页面 找到盒子列表。 在这个例子中,我们使用centos/8盒子: vagrant init centos/8 输出: A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. Vagrantfile 是一个 Ruby 文件,它用来描述如何配置和提供虚拟机。你可以打开 Vagrantfile,阅读注释,并且根据你自己的需求,做出相应的调整。 运行vagrant up命令按照 Vagrantfile 指定的内容来创建并且配置虚拟机。 vagrant up ==> default: Configuring and enabling network interfaces... default: SSH address: 192.168.121.74:22 default: SSH username: vagrant default: SSH auth method: private key ==> default: Rsyncing folder: /home/linuxize/Vagrant/my-vagrant-project/ => /vagrant Vagrant 将项目目录挂载到虚拟机的 /vagrant目录。这允许你在你的主机上操作你的项目文件。 想要使用 SSH 进入你的虚拟机,运行: vagrant ssh 你可以使用下面的命令停止虚拟机: vagrant halt 想要释放所有创建虚拟机过程中的资源,输入: vagrant destroy 三、总结 我们向你展示了如何在 Ubuntu 20.04 上安装 Vagrant 以及创建一个基本的 Vagrant 项目。 想要查找更多关于 Vagrant 的信息,浏览 Vagrant 官方文档页面。 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-and-use-docker-compose-on-ubuntu-20-04/ Docker Compose 是一个命令行工具,它允许你定义和编排多容器 Docker 应用。它使用 YAML 文件来配置应用服务,网络和卷。 使用 Compose, 你可以定义一个可以运行在任何系统上的可移植应用环境。 Compose 通常被用来本地开发,单机应用部署,和自动测试。 本文讲解如何在 Ubuntu 20.04 上安装最新版的 Docker Compose。我们还将探讨 Docker Compose 的几个概念和命令。 一、前提条件 我们假设你已经在你的机器上安装了 Docker。 二、在 Ubuntu 上安装 Docker Compose Docker Compose 是一个二进制文件。安装非常简单直接。我们将会将该文件下载到一个目录,并添加到系统的 PATH 环境变量,同时将该文件设置为可执行。 Docker Compose 软件包在官方的 Ubuntu 20.04 源仓库中可用,但是可能不是最新版本。 在写作这篇文章的时候,Docker Compose 最新的版本是1.25.5 。 在下载 Compose 之前,浏览 Compose 发布页面 并且检查是否有新版本可以下载。 使用curl将 Compose 文件下载到/usr/local/bin目录: sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 一旦下载完成,将该文件设置为可执行: sudo chmod +x /usr/local/bin/docker-compose 想要验证安装成功,运行下面的命令,打印 Compose 的版本: docker-compose --version 输出应该像下面这样: docker-compose version 1.25.5, build b02f1306 就这些。Docker Compose 已经在你的 Ubuntu 机器上安装好了,并且你可以开始使用它了。 三、Docker Compose 入门 在这一节,我们将会是使用 Docker Compose 来构建一个多容器 WordPress 应用。 第一步就是创建一个项目目录: mkdir my_app cd my_app 打开你的文本编辑器,并且创建一个文件,名为docker-compose.yml,放在项目目录下: nano docker-compose.yml 粘贴下面的内容: version: '3' services: db: image: mysql:5.7 restart: always volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: wordpress wordpress: image: wordpress restart: always volumes: - ./wp_data:/var/www/html ports: - "8080:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: password depends_on: - db volumes: db_data: wp_data: 让我们来分析docker-compose.yml文件的结构。 文件第一行指定了 Compose file的版本。这里有一些不同的 Compose 版本,每个版本支持指定的 Docker 发行版。 下一步,你定义服务,卷,和网络。 在这个例子中,我们有服务器,db 和 wordpress。当 docker-compose 运行,每一个服务运行一个镜像,创建一个独立的容器。 服务可以使用 DockerHub 上可用的镜像,或者从 Dockerfile 文件本地构建的镜像。服务一段同时还可以指定一些设置,用来指定暴露端口,卷,环境变量,依赖,和其他的 Docker 命令。 在项目目录,通过运行下面的命令来启动 WordPress 应用: docker-compose up Compose 将会拉取镜像,启动容器,并且创建wp_data目录。 在你的浏览器中输入http://0.0.0.0:8080/,你将会看到 Wordpress 安装屏幕。此时,WordPress 应用已经启动并且运行了,你可以开始安装主题或者插件了。 想要停止 Compose,按CTRL+C。 你还可以通过在 Compose 后面加上-d选项,以后台模式启动 Compose: docker-compose up -d 想要检查运行的服务,使用ps选项: docker-compose ps 输出如下: Name Command State Ports ---------------------------------------------------------------------------------- my_app_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp my_app_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp 当 Compose 运行在后台模式,想要停止服务,运行: docker-compose stop 想要停止,并且移除应用容器,和网络,使用down选项: docker-compose down 四、卸载 Docker Compose 想要卸载 Docker Compose,只需要简单删除二进制文件即可,输入: sudo rm /usr/local/bin/docker-compose 五、总结 我们已经向你展示如何在 Ubuntu 20.04 上安装 Docker Compose 。使用 Docker Compose 可以明显改善你的工作流程,提高你的工作效率。你可以使用 Docker Compose 定义一个开发环境,并且分享给项目合作者。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-ruby-on-ubuntu-20-04/ Yarn 是一个 JavaScript 包管理器,它兼容于 npm,可以帮助你自动处理安装,升级,配置,和移除 npm 包。它被创建,用于解决 npm 的一系列问题,例如通过并行操作提高软件包安装处理速度并且减少网络连接相关的错误。 在这篇指南中,我们将会讲解如何在 Ubuntu 20.04 上安装 Yarn。我们还将一起看看基础的 Yarn 命令和选项。 一、在 Ubuntu 上安装 Yarn 在 Ubuntu 上安装 Yarn 非常的简单直接。我们将会启用 Yarn 官方软件源,导入 GPG key,并且安装软件包。这个软件源一直被维护着,并且提供最新的版本。 导入软件源的 GPG key 并且添加 Yarn APT 软件源到你的系统,运行下面的命令: curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list 一旦软件源被启用,升级软件包列表,并且安装 Yarn。 sudo apt update sudo apt install yarn 上面的命令同时会安装 Node.js。如果你已经通过 nvm 安装了 Node,跳过 Node.js 安装过程: sudo apt install --no-install-recommends yarn 一旦完成,通过打印 Yarn 版本来验证安装过程: yarn --version 输出将会像下面这样: 1.22.4 安装在你的系统上的版本可能和上面的不同。 就这些。你已经成功地在你的 Ubuntu 机器上安装好了 Yarn,你可以开始使用它了。 二、使用 Yarn 现在,Yarn 已经在你的 Ubuntu 系统上安装好了,让我们一起去探索最常用的 Yarn 命令。 2.1 创建一个新工程 为你的应用创建一个文件夹,并且导航进去: mkdir ~/my_project && cd ~/my_project 想要创建一个新工程,运行yarn init: yarn init my_project 这个命令将会问你一些问题。按照提示输入信息,或者接受默认值: yarn init v1.22.4 question name (vagrant): Linuxize question version (1.0.0): 0.0.1 question description: Testing Yarn question entry point (index.js): question repository url: question author: Linuxize question license (MIT): question private: success Saved package.json Done in 20.18s. 一旦完成,这个脚本将会创建一个基础的package.json文件,这个文件包含一些被提供的必要信息。你可以在任何时间打开并编辑这个文件。 2.2 添加依赖 想要给添加一个 npm 软件包作为项目依赖,使用yarn add命令,加上软件包名称: yarn add [package_name] 上面这个命令将会更新package.json和yarn.lock文件。 默认情况下,当只给出软件包名称,Yarn 将会安装最新版本。想要安装指定版本或者标签,使用下面的语法: yarn add [package_name]@[version_or_tag] 2.3 升级依赖 想要升级软件包,使用下面命令中的一个: yarn upgrade yarn upgrade [package_name] yarn upgrade [package_name]@[version_or_tag] 如果没有给出软件包,这个命令会根据package.json指定的版本范围,将项目依赖包全部升级到它们的最新版本。否则,仅仅升级指定的软件包。 2.4 移除依赖 使用yarn remove命令加上软件包的名字,移除依赖: yarn remove [package_name] 这个命令将会移除软件包,并且升级项目的package.json和yarn.lock文件。 2.5 安装所有项目依赖 想要安装package.json文件中指定的所有项目依赖,运行: yarn 或者 yarn install 三、总结 我们已经向你展示了如何在你的 Ubuntu 机器上安装 Yarn。想要获得关于 Yarn 的更多信息,浏览 它们的文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-tomcat-9-on-ubuntu-20-04/ 这篇指南描述如何在 Ubuntu 20.04 上安装和配置 Tomcat 9 。 Apache Tomcat是一个开源的 Web 服务器和 Java servlet 容器。它是世界上最流行的选择,用来构建基于 Java 的网站和应用。Tomcat 是一个轻量级,易于使用,并且有一个强壮的扩展生态系统。 一、安装 Java Tomcat 9 要求在系统上安装 Java SE 8 或者更新版本。我们将会安装 OpenJDK 11,Java 平台的开源实现。 以 root 或者其他 sudo 权限用户身份运行下面的命令来更新软件包索引,并且安装 OpenJDK 11 JDK 软件包: sudo apt update sudo apt install openjdk-11-jdk 一旦安装完成,通过检查 Java 版本来验证它: java -version 输出应该像下面这样: openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing) 二、创建一个系统用户 以 root 用户运行 Tomcat 有一个安全风险。我们将会创建一个系统用户和用户组,其主目录为/opt/tomcat。我们将会使用这个用户来运行 Tomcat 服务。想要这么做,输入下面的命令: sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat 三、下载 Tomcat Tomcat 二进制发行版在 Tomcat 下载页面可以下载。 就在写作的时候,最新的 Tomcat 版本是 9.0.35。在继续下一步之前,检查 Tomcat 9 下载页面,看看是否有更新的版本可以下载。 使用wget来下载 Tomcat zip 文件到/tmp目录: VERSION=9.0.35 wget https://www-eu.apache.org/dist/tomcat/tomcat-9/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz -P /tmp 一旦下载完成,解压 tar 文件到/opt/tomcat目录: sudo tar -xf /tmp/apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/ Tomcat 会定期更新 安全补丁和新功能。想要更好地升级版本和更新,我们将会创建一个符号链接,称为latest,指向 Tomcat 安装目录。 sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest 稍后,当升级 Tomcat 时,解压新的版本,并且修改符号链接,指向它。 前面创建的系统用户必须对 tomcat 安装目录有访问权限。修改目录归属到用户和用户组 tomcat: sudo chown -R tomcat: /opt/tomcat 在 Tomcat bin目录下的 shell 脚本必须可执行: sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh' 这些脚本将会被用来启动,停止,以及其他对 Tomcat 的管理操作。 四、创建 SystemD 单元文件 与使用 shell 脚本来启动和停止 Tomcat 服务器相比,我们将会将它作为服务来运行。 打开你的文本编辑器,并且在/etc/systemd/system/目录下创建一个 tomcat.service 单元文件。 sudo nano /etc/systemd/system/tomcat.service 粘贴下面的配置文件: [Unit] Description=Tomcat 9 servlet container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true" Environment="CATALINA_BASE=/opt/tomcat/latest" Environment="CATALINA_HOME=/opt/tomcat/latest" Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/latest/bin/startup.sh ExecStop=/opt/tomcat/latest/bin/shutdown.sh [Install] WantedBy=multi-user.target 如果你的 Java 安装路径不一样,请修改`JAVA_HOME`环境变量。 保存并且关闭文件,通知 systemd 一个新的单元文件存在: sudo systemctl daemon-reload 启用并且启动 Tomcat 服务: sudo systemctl enable --now tomcat 检查服务状态: sudo systemctl status tomcat 输出应该显示 Tomcat 服务器已经启用,并且运行了: ● tomcat.service - Tomcat 9 servlet container Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-05-25 17:58:37 UTC; 4s ago Process: 5342 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 5362 (java) ... 你可以 像其他 systemd 服务一样 启动,停止和重启 Tomcat: sudo systemctl start tomcat sudo systemctl stop tomcat sudo systemctl restart tomcat 五、配置防火墙 如果你的服务器被防火墙保护,并且你想从外面访问你的Tomcat,你需要打开8080端口。 使用下面的命令打开必要的端口: sudo ufw allow 8080/tcp 通常,当在生产环境运行 Tomcat 时,你应该是使用一个负载均衡,或者反向代理服务器。这是仅仅允许从你的本地网络访问`8080`端口的最佳实践。 六、配置 Tomcat 网页管理界面 正在此时,你应该通过一个浏览器在8080端口访问 Tomcat。网页管理界面不能访问,因为我们还没有创建一个用户。 Tomcat 用户和角色被定义在 tomcat-users.xml。这个文件是一个带有注释和示例的模板,展示如何创建一个用户和角色。 在这个例子中,我们将会创建一个用户“admin-gui” 和 “manager-gui” 角色。这个 “admin-gui”角色允许用户访问/host-manager/htmlURL 来创建,删除和其他对虚拟主机的管理。这个“manager-gui”角色允许用户部署和解除部署 web 应用,而不用通过/host-manager/html界面重启整个容器。 打开tomcat-users.xml文件,创建一个新用户,像下面这样: sudo nano /opt/tomcat/latest/conf/tomcat-users.xml <tomcat-users> <!-- Comments --> <role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="admin" password="admin_password" roles="admin-gui,manager-gui"/> </tomcat-users> 确保你将用户名和密码修改得更加安全。 默认情况下,Tomcat 网页管理界面被配置仅仅从 localhost 访问 Manager 和 Host Manager 应用。想要从远程 IP 访问网页界面,你需要移除这些限制。 这可能会有一些安全隐患,我们不推荐在生产系统中这么做。 想要从任何地方都能访问网页界面,打开配置的两个文件,注释或者移除注释的部分。 对于 Manager: sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml 对于 Host Manager: sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml <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> 如果你只想从指定的 IP 访问网页界面,不要注释这一段,而是将你的公网 IP 地址加进去。 假如说你的公网 IP 是41.41.41.41,并且你想允许从那个 IP 访问网页界面: <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|41.41.41.41" /> </Context> 被允许的 IP 列表以|来分隔。你可以添加一个简单的 IP 地址,或者使用正则表达式。 一旦完成,重启 Tomcat 服务,使应用生效: sudo systemctl restart tomcat 七、测试 Tomcat 安装 打开你的浏览器,输入:http://<your_domain_or_IP_address>:8080 假设安装成功,一个类似下面的页面将会出现: {{< figure src="/img/linuxize/ubuntu/tomcat-home.jpg" link="https://cloud.tencent.com/act/cps/redirect?redirect=1040&cps_key=7ad172f808f30965a01c05887137e4d8&from=console" target="blank" >}} Tomcat 网页应用管理在: http://<your_domain_or_IP_address>:8080/manager/html {{< figure src="/img/linuxize/ubuntu/tomcat-manager.jpg" link="https://cloud.tencent.com/act/cps/redirect?redirect=1040&cps_key=7ad172f808f30965a01c05887137e4d8&from=console" target="blank" >}} Tomcat 虚拟主机管理在: http://<your_domain_or_IP_address>:8080/host-manager/html {{< figure src="/img/linuxize/ubuntu/tomcat-host-manager.jpg" link="https://cloud.tencent.com/act/cps/redirect?redirect=1040&cps_key=7ad172f808f30965a01c05887137e4d8&from=console" target="blank" >}} 八、总结 我们已经向你展示如何在 Ubuntu 20.04 上安装 Tomcat 9.0,并且如何访问 Tomcat 管理界面。 想要获得更多关于 Apache Tomcat 的信息,浏览官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-yarn-on-ubuntu-20-04/ Yarn 是一个 JavaScript 包管理器,它兼容于 npm,可以帮助你自动处理安装,升级,配置,和移除 npm 包。它被创建,用于解决 npm 的一系列问题,例如通过并行操作提高软件包安装处理速度并且减少网络连接相关的错误。 在这篇指南中,我们将会讲解如何在 Ubuntu 20.04 上安装 Yarn。我们还将一起看看基础的 Yarn 命令和选项。 一、在 Ubuntu 上安装 Yarn 在 Ubuntu 上安装 Yarn 非常的简单直接。我们将会启用 Yarn 官方软件源,导入 GPG key,并且安装软件包。这个软件源一直被维护着,并且提供最新的版本。 导入软件源的 GPG key 并且添加 Yarn APT 软件源到你的系统,运行下面的命令: curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list 一旦软件源被启用,升级软件包列表,并且安装 Yarn。 sudo apt update sudo apt install yarn 上面的命令同时会安装 Node.js。如果你已经通过 nvm 安装了 Node,跳过 Node.js 安装过程: sudo apt install --no-install-recommends yarn 一旦完成,通过打印 Yarn 版本来验证安装过程: yarn --version 输出将会像下面这样: 1.22.4 安装在你的系统上的版本可能和上面的不同。 就这些。你已经成功地在你的 Ubuntu 机器上安装好了 Yarn,你可以开始使用它了。 二、使用 Yarn 现在,Yarn 已经在你的 Ubuntu 系统上安装好了,让我们一起去探索最常用的 Yarn 命令。 2.1 创建一个新工程 为你的应用创建一个文件夹,并且导航进去: mkdir ~/my_project && cd ~/my_project 想要创建一个新工程,运行yarn init: yarn init my_project 这个命令将会问你一些问题。按照提示输入信息,或者接受默认值: yarn init v1.22.4 question name (vagrant): Linuxize question version (1.0.0): 0.0.1 question description: Testing Yarn question entry point (index.js): question repository url: question author: Linuxize question license (MIT): question private: success Saved package.json Done in 20.18s. 一旦完成,这个脚本将会创建一个基础的package.json文件,这个文件包含一些被提供的必要信息。你可以在任何时间打开并编辑这个文件。 2.2 添加依赖 想要给添加一个 npm 软件包作为项目依赖,使用yarn add命令,加上软件包名称: yarn add [package_name] 上面这个命令将会更新package.json和yarn.lock文件。 默认情况下,当只给出软件包名称,Yarn 将会安装最新版本。想要安装指定版本或者标签,使用下面的语法: yarn add [package_name]@[version_or_tag] 2.3 升级依赖 想要升级软件包,使用下面命令中的一个: yarn upgrade yarn upgrade [package_name] yarn upgrade [package_name]@[version_or_tag] 如果没有给出软件包,这个命令会根据package.json指定的版本范围,将项目依赖包全部升级到它们的最新版本。否则,仅仅升级指定的软件包。 2.4 移除依赖 使用yarn remove命令加上软件包的名字,移除依赖: yarn remove [package_name] 这个命令将会移除软件包,并且升级项目的package.json和yarn.lock文件。 2.5 安装所有项目依赖 想要安装package.json文件中指定的所有项目依赖,运行: yarn 或者 yarn install 三、总结 我们已经向你展示了如何在你的 Ubuntu 机器上安装 Yarn。想要获得关于 Yarn 的更多信息,浏览 它们的文档页面。 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-use-docker-on-ubuntu-20-04/ Docker 是一个开源的容器化平台,它允许你构建,测试,并且作为可移动的容器去部署应用,这些容器可以在任何地方运行。一个容器表示一个应用的运行环境,并且包含软件运行所需要的所有依赖软件。 Docker 是现代软件开发,持续集成,持续交付的一部分。 这篇教程将会涉及如何在 Ubuntu 上安装 Docker。 Docker 在标准的 Ubuntu 20.04 软件源中可用,但是可能不是最新的版本。我们将会从 Docker 的官方软件源中安装最新的 Docker 软件包。 一、在 Ubuntu 20.04 上安装 Docker 在 Ubuntu 上安装 Docker 非常直接。我们将会启用 Docker 软件源,导入 GPG key,并且安装软件包。 首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源: sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 使用下面的 curl 导入源仓库的 GPG key: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 将 Docker APT 软件源添加到你的系统: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 现在,Docker 软件源被启用了,你可以安装软件源中任何可用的 Docker 版本。 01.想要安装 Docker 最新版本,运行下面的命令。如果你想安装指定版本,跳过这个步骤,并且跳到下一步。 sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io 02.想要安装指定版本,首先列出 Docker 软件源中所有可用的版本: sudo apt update apt list -a docker-ce 可用的 Docker 版本将会在第二列显示。在写作这篇文章的时候,在官方 Docker 软件源中只有一个 Docker 版本(5:19.03.9~3-0~ubuntu-focal)可用: docker-ce/focal 5:19.03.9~3-0~ubuntu-focal amd64 通过在软件包名后面添加版本=<VERSION>来安装指定版本: sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io 一旦安装完成,Docker 服务将会自动启动。你可以输入下面的命令,验证它: sudo systemctl status docker 输出将会类似下面这样: ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-21 14:47:34 UTC; 42s ago ... 当一个新的 Docker 发布时,你可以使用标准的sudo apt update && sudo apt upgrade流程来升级 Docker 软件包。 如果你想阻止 Docker 自动更新,锁住它的版本: sudo apt-mark hold docker-ce 二、以非 Root 用户身份执行 Docker 默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。 想要以非 root 用户执行 Docker 命令,你需要将你的用户添加到 Docker 用户组,该用户组在 Docker CE 软件包安装过程中被创建。想要这么做,输入: sudo usermod -aG docker $USER $USER是一个环境变量,代表当前用户名。 登出,并且重新登录,以便用户组会员信息刷新。 三、验证安装过程 想要验证 Docker 是否已经成功被安装,你可以执行docker命令,前面不需要加`sudo, 我们将会运行一个测试容器: docker container run hello-world 如果本地没有该镜像,这个命令将会下载测试镜像,在容器中运行它,打印出 “Hello from Docker”,并且退出。 输出看起来应该像这样: 这个容器将会在打印消息后停止运行,因为它没有任何长期运行的进程。 默认情况下,Docker 从 Docker Hub 拉取镜像。它是一个云端服务,主要用来储存 公有和私有源中的 Docker 镜像。 四、卸载 Docker 在卸载 Docker 之前,你最好 移除所有的容器,镜像,卷和网络。 运行下面的命令停止所有正在运行的容器,并且移除所有的 docker 对象: docker container stop $(docker container ls -aq) docker system prune -a --volumes 现在你可以使用apt像卸载其他软件包一样来卸载 Docker: sudo apt purge docker-ce sudo apt autoremove 五、总结 我们已经向你展示如何在 Ubuntu 20.04 机器上安装 Docker。 想要学习更多关于 Docker 的信息,查阅官方 Docker 文档。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-xrdp-on-ubuntu-20-04/ Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统。通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样。 这篇指南讲解如何在 Ubuntu 20.04 上安装和配置 Xrdp 服务器。 一、安装桌面环境 Ubuntu 服务器通常使用命令行进行管理,并且默认没有安装桌面环境。如果你正在运行 Ubuntu 桌面版,忽略这一步。 在 Ubuntu 源仓库有很多桌面环境供你选择。一个选择是安装 Gnome,它是 Ubuntu 20.04 的默认桌面环境。另外一个选项就是安装 xfce。它是快速,稳定,并且轻量的桌面环境,使得它成为远程服务器的理想桌面。 运行下面任何一个命令去安装你选择的桌面环境: 安装 Gnome sudo apt update sudo apt install ubuntu-desktop 安装 Xfce sudo apt update sudo apt install xubuntu-desktop 取决于你的系统,下载和安装 GUI 软件包,将会花费一些时间。 二、安装 Xrdp Xrdp 被包含在默认的 Ubuntu 软件源中。想要安装它,运行: sudo apt install xrdp 一旦安装完成,Xrdp 服务将会自动启动。你可以输入下面的命令,验证它: sudo systemctl status xrdp 输出将会像下面这样: ● xrdp.service - xrdp daemon Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-05-22 17:36:16 UTC; 4min 41s ago ... 默认情况下,Xrdp 使用/etc/ssl/private/ssl-cert-snakeoil.key,它仅仅对“ssl-cert” 用户组成语可读。运行下面的命令,将xrdp用户添加到这个用户组: sudo adduser xrdp ssl-cert 重启 Xrdp 服务,使得修改生效: sudo systemctl restart xrdp 就这样。Xrdp 已经在你的 Ubuntu 服务器上安装好了,你可以开始使用它了。 三、Xrdp 配置 Xrdp 配置文件定位在/etc/xrdp目录。对于基本的 Xrdp 链接,你不需要对配置文件做任何改动。 Xrdp 使用默认的 X Window 桌面环境()Gnome or XFCE)。 主要的配置文件被命名为 xrdp.ini。这个文件被分成不同的段,允许你设置全局配置,例如安全,监听地址,创建不同的 xrdp 登录会话等。 不管什么时候你对配置文件做出修改,你需要重启 Xrdp 服务。 Xrdp 使用startwm.sh文件启动 X 会话。如果你想使用另外一个 X Window 桌面,编辑这个文件。 四、配置防火墙 Xrdp 守护程序在所有的网络接口上监听端口3389。如果你在你的 Ubuntu 服务器上运行一个防火墙,你需要打开 Xrdp 端口。 想要允许从某一个指定的 IP 地址或者 IP 范围访问 Xrdp 服务器,例如192.168.33.0/24,你需要运行下面的命令: sudo ufw allow from 192.168.33.0/24 to any port 3389 如果你想允许从任何地方访问(由于安全原因,这种方式不鼓励),运行: sudo ufw allow 3389 想要增加安全,你可以考虑 Xrdp 仅仅监听 localhost,并且创建一个 SSH 隧道,将本地机器的3389端口到远程服务器的同样端口之间的流量加密。 五、连接 Xrdp 服务器 现在你已经设置好你的 Xrdp 服务器,是时候打开你的 Xrdp 客户端并且连接到服务器。 如果你有一台 Windows 电脑,你可以使用默认的 RDP 客户端。在 Windows 搜索栏输入“remote”,并且点击“Remote Desktop Connection”。这将会打开一个 RDP 客户端。在“Computer”区域输入远程服务器 IP地址,并且点击“Connect”。 在登录屏幕,输入你的用户名和密码,点击“OK”。 一旦登录,你将看到默认的 Gnome 或者 Xfce 桌面,它应该像下面这样: 现在你可以从你的本地机器上使用你的键盘和鼠标和远程桌面进行交互了。 如果你正在运行 macOS,你可以从Mac App Store安装 Microsoft Remote Desktop应用。 Linux 用户可以使用一个 RDP 客户端,例如 Remmina 或者 Vinagre。 六、总结 配置一个远程桌面,允许你从你的本地机器通过一个简单易用的图形界面来管理你的 Ubuntu 20.04 服务器。 如果你有任何疑问,请通过以下方式联系我们: 微信: 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-mariadb-on-ubuntu-20-04/ MariaDB 是一个开源的关系型数据库管理系统,向后兼容,可替代 MySQL。 MariaDB是由 MySQL 的一些原开发者和很多社区成员共同开发的。 这篇指南将会讲解如何在 Ubuntu 20.04 上安装和保护 MariaDB。 一、前提条件 我们假设你拥有 Ubuntu 服务器的管理权限,或者以 root 身份 或者以拥有 sudo 权限的用户身份登录系统。 二、在 Ubuntu 上安装 MariaDB 在写作的时候,Ubuntu 软件源仓库中的 MariaDB 最新版是 10.3。想要安装它,运行下面的命令: sudo apt update sudo apt install mariadb-server 一旦安装完成,MariaDB 服务将会自动启动。 想要验证数据库服务器是否正在运行,输入: sudo systemctl status mariadb 输出将会显示服务已经启用,并且正在运行: ... 三、保护 MariaDB MariaDB 服务器有一个脚本叫做mysql_secure_installation,它允许你可以很容易提高数据库服务器安全。 不带参数运行脚本: sudo mysql_secure_installation 脚本将会提示你输入 root 密码: Enter current password for root (enter for none): 因为你没有设置 root 密码,仅仅输入回车"Enter"。 在下一个提示中,你会被问到是否 MySQL root 用户设置密码: Set root password? [Y/n] n 输入n。在 Ubuntu 上, MariaDB 用户默认使用auth_socket进行鉴权。这个插件会检查启动客户端的本地系统用户是否和指定的 MariaDB 用户名相匹配。 下一步,你将会被要求移除匿名用户,限制 root 用户访问本地机器,移除测试数据库,并且重新加载权限表。对于所有的问题,你应该回答Y: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y 四、以 root 身份登录 想要在终端命令行和 MariaDB 服务器进行交互,使用mysql客户端工具或者mariadb。这个工具被作为 MariaDB 服务器软件包的依赖软件被安装。 这个auth_socket插件将会通过 Unix socket 文件验证用户来连接localhost。这就意味着你不能通过提供密码来验证 root。 想要以 root 用户名登录 MariaDB 服务器,输入: sudo mysql 你将会被展示 MariaDB shell,就像下面一样: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 61 Server version: 10.3.22-MariaDB-1ubuntu1 Ubuntu 20.04 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> Bye 如果你想使用第三方程序,例如 phpMyAdmin ,以 root 身份登录你的 MariaDB 服务器,你有两个选择。 第一个是将鉴权方法从auth_socket修改为mysql_native_password。你可以通过运行下面的命令做到: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password'; FLUSH PRIVILEGES; 第二个,推荐的方式就是创建一个管理员用户,可以访问所有的数据库: GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'localhost' IDENTIFIED BY 'very_strong_password'; 你可以将这个管理员用户命名为任何你想要的名字,但是请确保你使用了一个强大的密码。 五、总结 我们已经向你展示了如何在 Ubuntu 20.04 上安装 MariaDB。现在你的数据库服务器已经上线,并且正在运行。下一步,你可以去学习如何管理 MariaDB 用户账号和数据。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-webmin-on-ubuntu-20-04/ Webmin 是一个开源控制面板,它允许你通过简单易用的 Web 界面,就可以管理你的 Linux 服务器。它允许你管理用户,组,磁盘配额,创建文件和目录,也能配置大多数流行的服务,包括 Web,FTP,Email 和数据库。 这篇教程讲解如何在 Ubuntu 20.04 服务器 上安装 Webmin。 一、前提条件 我们假设你拥有 Ubuntu 服务器的管理权限,或者是 root 或者是有 sudo 权限的用户。 二、在 Ubuntu 上安装 Webmin Webmin 没有被包含在标准的 Ubuntu 软件源中。安装非常地直接。我们将会启用 Webmin 软件源,并且使用apt安装软件包。 下面这些步骤,描述了在 Ubuntu 上安装 Webmin 的过程: 01.首先,升级软件包列表,并且安装依赖软件: sudo apt update sudo apt install software-properties-common apt-transport-https wget 02.导入 Webmin 的 GPG key 并且将 Webmin 软件源添加到你的系统软件源: wget -q http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] http://download.webmin.com/download/repository sarge contrib" add-apt-repository命令将会升级软件包索引。 03.安装最新版的 Webmin,输入: sudo apt install webmin 所有的依赖将会自动解决,并且安装。一旦完成,下面的输出将会显示: Webmin install complete. You can now login to https://vagrant:10000/ as root with your root password, or as any user who can use sudo to run commands as root. Webmin 服务将会被自动启动。 就这些。此时,你已经在你的 Ubuntu 20.04 服务器上安装好了 Webmin。 当一个新的版本发布之后,想要升级你的 Webmin,使用标准的 apt 升级步骤。 三、调整防火墙 默认情况下,Webmin 在所有网络接口上监听端口10000。你需要在你的防火墙上打开这个端口,以便通过互联网可以访问 Webmin。 假设你在使用UFW,你可以运行下面的命令: sudo ufw allow 10000/tcp 四、访问 Webmin 网络界面 现在 Webmin 在你的 Ubuntu 系统上安装好了。打开你最喜欢的浏览器,并且输入服务器的主机名或者公网 IP 加上 Webmin 的端口10000: https://your_server_ip_or_hostname:10000/ 浏览器将会警示证书非法。默认情况下,Webmin 使用一个不被信任的自签名 SSL 证书。 使用你的 root 或者其他 sudo 用户身份登录 Webmin 网络界面: 一旦登录完成,你将会被转向到 Webmin 控制台,这里提供了你系统的基本信息。 从这里开始,你可以按照你的需求开始配置并且管理你的 Ubuntu 20.04 服务器。 五、总结 我们已经向你展示如何在你的 Ubuntu 20.04 机器上如何安装 Webmin。现在你可以安装一个 FTP 服务器或者 LAMP/LEMP ,并且开始通过 Webmin 网页界面来管理服务了。 想要学习更多关于 Webmin 的知识,浏览官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-zoom-on-ubuntu-20-04/ Zoom 是一个用来沟通的平台,它提供统一云视频会议,实时消息,内容共享。使用 Zoom,你可以主持在线研讨会,组织在线会议,并且创建会议室。 这个指南讲解了如何在 Ubuntu 20.04 上如何安装 Zoom。同样的指令,适合所有的基于 Deian 的发行版,包括 Kubuntu, Linux Mint, 和 Elementary OS。 一、在 Ubuntu 上安装 Zoom Zoom 不是一个开源应用,并且不被包括在 Ubuntu 软件源中。我们将会从他们的 APT 软件源中安装 Zoom。 以 root 或者 soudu 用户身份执行下面的命令,在你的 Ubuntu 机器上安装 Zoom。 01.打开你的终端,并且输入下面的 wget 命令来下载最新的 Zoom deb 软件包: wget https://zoom.us/client/latest/zoom_amd64.deb 02.一旦下载完成,以 sudo 用户身份运行下面的命令安装 Zoom: sudo apt install ./zoom_amd64.deb 你将会被提示输入密码。 就这些。Zoom 已经被安装好了,你可以开始使用它了。 后期,如果有新版本发布,想要升级 Zoom,你可以重复同样的步骤。 二、启动 Zoom 通过在命令行输入zoom或者点击 Zoom 图标(Applications -> Internet -> zoom),启动 Zoom。 当你第一次启动 Zoom,一个类似下面的窗口将会出现: 从这里开始,你就可以注册你的 Zoom 账号,并且开始和你的朋友和家人进行视频会议了。 三、卸载 Zoom 如果因为有些原因,你想卸载 Zoom,打开你的终端,并且运行下面的命令: sudo apt remove zoom 四、总结 我们已经向你展示了如何在 Ubuntu 20.04 桌面版上安装 Zoom。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-node-js-on-ubuntu-20.04/ Node.js 是一个跨平台的 JavaScript 运行环境,它构建在为了在服务器端运行 JavaScript 代码而设计的 Chrome JavaScript 上。它通常被用来构建后端应用,但是它也是非常流行的全栈和前端解决方案。npm 是 Node.js 的默认包管理工具,也是世界上最大的软件仓库。 在这个指南中,我们将会探索,在 Ubuntu 20.04 上安装 Node.js 和 npm 三种不同的方式。 从 Ubuntu 标准的软件源。这是在 Ubuntu 上安装 Node.js 和 npm 最简单的方式,并且对大部分用户场景都足够了。包含在 Ubuntu 软件源中的版本是 10.19.0。 从 NodeSource 源仓库。使用这个仓库,你可以安装不同版本的 Node.js,而不像 Ubuntu 仓库中那样只能安装一个版本。当前,NodeSource 支持Node.js v14.x, v13.x, v12.x, 和 v10.x。 使用nvm(Node Version Manager)。这个工具允许你在同一台机器上安装多个 Node.js 版本。如果你是 Node.js 开发者,这可能是你最喜欢的安装 Node.js 的方式。 选择一个最适合你的环境的安装方式。如果你不确定你要安装哪一个 Node.js 版本,阅读你将要部署的应用的文档。 一、从 Ubuntu 软件源安装 Node.js 和 npm 在写作的时候,包含在 Ubuntu 20.04 软件源中的 Node.js 版本是10.19.0,这是一个长期版本。 安装非常直接。运行下面的命令更新软件包索引,并且安装 Node.js 和 npm: sudo apt update sudo apt install nodejs npm 上面的命令将会安装一系列包,包括编译和安装从 npm 来的本地扩展。 一旦完成,运行下面的命令,验证安装过程: nodejs --version v10.19.0 二、 从 NodeSource 中安装 Node.js 和 npm NodeSource 是一个公司,聚焦于提供企业级的 Node 支持。它维护了一个 APT 软件源,其中包含了很多 Node.js 版本。如果你的应用需要指定版本的Node.js 版本,使用这个软件源。 在写作的时候,NodeSource 软件源提供了以下版本: v14.x - 最新稳定版 v13.x v12.x - 最新长期版本 v10.x - 前一个长期版本 我们将会安装 Node.js 版本 14.x: 01.以 sudo 用户身份运行下面的命令,下载并执行 NodeSource 安装脚本: curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 这个脚本将会添加 NodeSource 的签名 key 到你的系统,创建一个 apt 源文件,安装必备的软件包,并且刷新 apt 缓存。 如果你需要另外的 Node.js 版本,例如12.x,将setup_14.x修改为setup_12.x。 02.一旦 NodeSource 源被启用,安装 Node.js 和 npm: sudo apt install nodejs nodejs 软件包同时包含node和npm二进制包。 03.验证 Node.js 和 npm 是否正确安装。打印它们的版本号: node --version 输出: v14.2.0 npm --version 输出: 6.14.4 想要从 npm 编译本地扩展,你需要安装开发工具: sudo apt install build-essential 三、从 NVM 安装 Node.js 和 npm NVM (Node Version Manager) 是一个 Bash 脚本,它允许你为每一个用户管理多个 Node.js 版本。使用 NVM,你可以随时安装或者卸载任何你想要使用或者测试的 Node.js版本。 浏览nvm页面,并且拷贝下面的curl或者wget命令去下载和安装nvm脚本: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash 不要使用 sudo 运行,因为这会为 root 用户启用nvm。 脚本将会从 Github 克隆项目到~/.nvm文件夹: => Close and reopen your terminal to start using nvm or run the following to use it now: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion 就像上面说的,你应该关闭并且重新打开终端,或者运行下面的命令来将nvm脚本添加到当前 shell 会话。你可以选择一个你认为容易的。 一旦脚本在你的PATH中,验证nvm是否被正确安装,输入: nvm --version 输出: 0.35.3 想要获取一系列 Node.js 版本,你可以使用nvm,运行: nvm list-remote 这个命令将会打印很多可用的 Node.js 版本。 想要安装最新可用的 Node.js,运行: nvm install node 输出应该像下面这样: ... Checksums matched! Now using node v14.2.0 (npm v6.14.4) Creating default alias: default -> node (-> v14.2.0) 一旦安装完成,验证它,打印 Node.js 版本: node --version 输出: v14.2.0 让我们安装更多版本,最新的长期版本和版本10.9.0: nvm install --lts nvm install 10.9.0 你可以列出安装的 Node.js 版本,输入: nvm ls 输出应该像下面这样: > v10.9.0 v12.16.3 v14.2.0 default -> node (-> v14.2.0) node -> stable (-> v14.2.0) (default) stable -> 14.2 (-> v14.2.0) (default) iojs -> N/A (default) unstable -> N/A (default) lts/* -> lts/erbium (-> v12.16.3) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.17.0 (-> N/A) lts/dubnium -> v10.20.1 (-> N/A) lts/erbium -> v12.16.3 这条箭头右边(> v10.9.0)是当前 shell 会话使用的 Node.js 版本,并且默认的版本被设置成v14.2.0。默认的版本是,当你打开新的 shell 会话时,使用的版本。 如果你想修改当前使用的版本,输入: nvm use 12.16.3 输出: Now using node v12.16.3 (npm v6.14.4) 想要修改默认的 Node.js 版本,运行下面的命令: nvm alias default 12.16.3 想要更多关于如何使用nvm脚本的信息,浏览这个项目的 Github 页面。 四、总结 我们向你展示了在你的 Ubuntu 20.04 服务器上安装 Node.js 和 npm 的三种不同方式。你选择的方式取决于你的要求和偏好。虽然通过 Ubuntu 或者 NodeSource 源来安装软件包版本,比较简单方便,但是 nvm 给你更多的自由,用来为每个用户添加或者移除 Node.js 版本。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-add-swap-space-on-ubuntu-20-04/ 交换空间是硬盘上的一个空间,当物理 RAM 内存被用尽时,被紧急征用的空间。当一个 Linux 系统 RAM 内存耗尽,不活跃的内存页将会被移动到交换空间。 交换空间可以是一个独立的交换分区,也可以是一个交换文件。有代表性地,当在一个虚拟机上运行一个 Ubuntu 时,没有一个交换分区,并且唯一的选项就是创建一个交换文件。 本教程讲解如何在 Ubuntu 20.04上添加一个交换文件。 一、在开始之前 交换分区不应该被当作物理内存的替代品。因为交换分区是硬盘驱动器的一部分,它比物理内存更慢的访问时间。如果你的系统经常内存耗尽,你应该添加更多内存。 通常,交换文件大小依赖于你的系统有多少 RAM 内存: 少于2 GB RAM 内存的系统 - 2倍 RAM 内存的大小 2 到 8 GB RAM 内存的系统 - 同样 RAM 内存大小 大于 8 GB RAM 内存的系统 - 至少 4 GB 交换文件 仅仅只有 root 或者其他有 sudo 权限的用户能够激活 swap 文件。 二、创建一个交换文件 在这个例子中,我们创建2 GB交换文件。如果你想添加更多交换文件,将2G替换成你需要设置的交换空间的大小。 完成下面的步骤,在 Ubuntu 20.04 上添加交换空间: 01.首先,创建一个用作交换文件的文件: sudo fallocate -l 2G /swapfile 如果fallocate工具在你的系统上不可用,或者你获得一个消息:fallocate failed: Operation not supported,使用下面的命令去创建交换文件: sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152 02.设置文件权限到600阻止常规用户读写这个文件: sudo chmod 600 /swapfile 03.在这个文件上创建一个 Linux 交换区: sudo mkswap /swapfile 输出如下: Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=fde7d2c8-06ea-400a-9027-fd731d8ab4c8 04.通过运行下面的命令,激活交换区: sudo swapon /swapfile 想要持久化,打开/etc/fstab文件: sudo nano /etc/fstab 并且粘贴下面的行: /swapfile swap swap defaults 0 0 05.使用swapon或者free命令来验证交换区是否已激活,像下面这样: sudo swapon --show NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -1 sudo free -h total used free shared buff/cache available Mem: 981Mi 97Mi 68Mi 0.0Ki 814Mi 735Mi Swap: 2.0Gi 10Mi 1.9Gi 三、调整 Swappiness 值 Swappiness 是一个 Linux 内核属性,用来定义系统将会有多频繁使用交换分区。它取值范围从 0 到 100。一个较低的取值可以在可能的情况下,尽量避免交换,而一个较高的值会使得内核更频繁地使用交换分区。 在 Ubuntu 上,默认的 Swappiness 取值被设置成 60。你可以通过输入下面的命令检查这个当前值: cat /proc/sys/vm/swappiness 输出如下: 60 Swappiness 为 60 适合大部分 Linux 操作系统,对于生产服务器,你需要将这个值设置成更低。 例如,将 Swappiness 值修改成 10,运行: sudo sysctl vm.swappiness=10 想要将这个参数持久化,在重启时仍然起作用,将下面的内容附加到/etc/sysctl.conf文件: vm.swappiness=10 最理想的 swappiness 取决于你的系统,以及内存是怎么被使用的。你需要小步调整这个取值来查找一个最适合的值。 四、移除一个交换文件 想要取消激活,并且删除交换文件,按照下面的步骤: 01.首先,取消激活交换空间: sudo swapoff -v /swapfile 02.下一步,从/etc/fstab文件中移除交换文件条目/swapfile swap swap defaults 0 0。 03.最后,使用rm命令删除实际的交换区文件: sudo rm /swapfile 五、总结 我们已经向你展示了在你的 Ubuntu 20.04 系统上如何创建一个交换文件,并且激活,并且配置交换空间。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-apache-on-ubuntu-20-04/ Apache 是世界上最流行的网站服务器之一。它是开源并且跨平台的 HTTP 服务器,它托管了互联网上大量的网站。Apache 提供了很多强大的功能,并且可以扩展其他的模块。 这篇文章描述了如何在 Ubuntu 20.04 上安装和管理 Apache 网站服务器。 一、前提条件 在开始这个指南之前,确保你以 sudo 权限用户身份登录。 二、安装 Apache Apache 被包含在默认的 Ubuntu 软件源中。 安装非常直接。在 Ubuntu 和 Debian 系统中,Apache 软件包和服务被称为 apache2。 运行下面的命令来更新软件包索引,并且安装 Apache: sudo apt update sudo apt install apache2 当安装过程完成,Apache 服务将会被自动启动。 你可以通过输入下面的命令,验证 Apache 是否正在运行: sudo systemctl status apache2 输出将会告诉你,服务正在运行,并且启动了开机启动。 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-09 19:28:40 UTC; 36min ago ... 就这些,你已经成功地在你的 Ubuntu 20.04上安装了 Apache,你可以开始使用它了。 三、打开 HTTP 和 HTTPS 端口 Apache 监听了端口80(HTTP)和443(HTTPS)。你需要在防火墙打开那些端口,以便网站服务器从互联网上是可以访问的。 假设你正在使用UFW,你可以通过启用Apache Full配置,它包含了这两个端口的规则: sudo ufw allow 'Apache Full' 验证改变: sudo ufw status 输出如下: Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere Apache Full ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6) 四、验证 Apache 安装 想要验证一切都顺利工作,打开你的浏览器,输入服务器 IP 地址http://YOUR_IP_OR_DOMAIN/,你可以看到默认的 Ubuntu 20.04 Apache 欢迎页面,像下面这样: 这个页面包含了 Apache 配置文件,帮助脚本和文件夹位置的一些基本信息。 五、设置一个虚拟主机 一个虚拟主机,是一个 Apache 配置指令,它允许你在一个服务器上运行多个网站。典型的例子,一个虚拟主机描述了一个网站。 Apache 默认启动了一个虚拟主机。所有域名都指向服务器 IP 地址,匹配了默认的虚拟主机。如果你只托管一个简单的网站,你需要将网站内容上传到/var/www/html,并且编辑虚拟主机配置,/etc/apache2/sites-enabled/000-default.conf文件。 如果你想托管更多网站,你需要为每一个网站创建一个虚拟主机配置。在这一节,我们将会为一个域名"example.com"设置网站。你可能需要将"example.com"替换成你自己的域名。 第一步就是创建根目录文件夹,域名的网站文件将会被存放在这里并且响应用户请求。运行下面的命令,创建这个文件夹: sudo mkdir -p /var/www/example.com 为了测试目的,在域名根文件夹下创建一个index.html文件: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Welcome to example.com</title> </head> <body> <h1>Success! example.com home page!</h1> </body> </html> 当你做完时,保存并且关闭文件。 想要避免权限问题,修改域名根文件夹的用户归属为apache 用户(www-data): sudo chown -R www-data: /var/www/example.com 下一步就是为域名“example.com”创建一个虚拟主机配置。最佳实践就是将每一个虚拟主机配置存储成一个独立的文件。 Apache虚拟主机配置文件存储在/etc/apache2/sites-available目录。标准命名是使用域名来命名配置文件。 打开你的文本编辑器,并且创建下面的文件/etc/apache2/sites-available/example.com.conf: <VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www/example.com/public_html <Directory /var/www/example.com/public_html> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined </VirtualHost> Apache 不会读取/etc/apache2/sites-available文件夹下的配置文件,除非它们被链接到/etc/apache2/sites-enabled文件夹。 想要激活虚拟主机配置,使用a2ensite创建一个链接: sudo a2ensite example.com 测试配置文件,是否有任何语法错误: sudo apachectl configtest 如果没有任何错误,你将会看到下面的输出: Syntax OK 重启 Apache 服务,使修改生效: sudo systemctl restart apache2 最终,想要验证一切都按照预期工作,在你的浏览器中打开http://example.com,你将会看到类似下面的图片: 六、总结 我们向你展示如何在 Ubuntu 20.04 上安装 Apache。你现在已经准备好部署你的应用,并且将 Apache 用作网站或者代理服务器了。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/ 防火墙是一个用来监视和过滤进出网络流量的工具。它通过定义一系列安全规则,来决定是否允许或者屏蔽指定的流量。 Ubuntu 自带的防火墙配置工具被称为 UFW (Uncomplicated Firewall)。UFW 是一个用来管理 iptables 防火墙规则的用户友好的前端工具。它的主要目的就是为了使得管理 iptables 更简单,就像名字所说的,简单的。 本文描述如何在 Ubuntu 20.04上使用 UFW 工具来配置和管理一个防火墙。一个被正确配置的防火墙是所有系统安全中最重要的部分。 一、前提条件 仅仅 root 或者其他有 sudo 权限的用户可以管理系统防火墙。最佳实践就是以 sudo 用户来运行管理员任务。 二、安装 UFW UFW 是标准 Ubuntu 20.04 安装过程中的一部分,它应该已经在你的系统上存在。如果因为某些原因,它没有被安装,你可以通过输入下面的命令安装它: sudo apt update sudo apt install ufw 三、检查 UFW 的状态 安装过程不会自动激活防火墙,以避免服务器被锁住。你可以检查 UFW 的状态,输入: sudo ufw status verbose 输出如下: Status: inactive 如果 UFW 激活了,输入应该类似下面这样: 四、UFW 默认策略 默认情况下,UFW 阻塞了所有进来的连接,并且允许所有出去的连接。这意味着任何人无法访问你的服务器,除非你打开端口。运行在服务器上的应用和服务可以访问外面的世界。 默认的策略定义在/etc/default/ufw文件中,并且可以通过使用sudo ufw default <policy> <chain>命令来修改。 防火墙策略是用来构建更多详细的和用户自定义的规则的基础。通常情况下,初始的默认策略是一个很好的起点。 五、应用配置 大部分应用都附带一份应用配置,它描述了服务,并且包含了 UFW 设置。这个规则在软件包安装的时候,被自动创建在/etc/ufw/applications.d目录下。 想要列举出你系统上所有的应用配置,输入: sudo ufw app list 与你系统上安装的软件包有关系,输出应该看起来像下面这样: Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH 想要查找更多关于指定配置和包含规则的信息,使用下面的命令: sudo ufw app info 'Nginx Full' 输出应该显示"Nginx Full"配置打开了端口"80"和"443"。 Profile: Nginx Full Title: Web Server (Nginx, HTTP + HTTPS) Description: Small, but very powerful and efficient web server Ports: 80,443/tcp 你也可以为你的应用创建自定义的配置。 六、启用 UFW 如果你在远程位置连接你的 Ubuntu,在启用 UFW 防火墙之前,你必须显式允许进来的 SSH 连接。否则,你将永远都无法连接到机器上。 现在 UFW 防火墙被配置允许 SSH 远程连接,启用它,输入: sudo ufw allow ssh 输出: Rules updated Rules updated (v6) 如果 SSH 运行在非标准端口,你需要打开这个端口。 例如,如果你的 SSH 守护程序监听了7722,输入下面的命令,允许连接通过那个端口: sudo ufw allow 7722/tcp 现在防火墙被配置允许进来的 SSH 连接,你可以输入下面的命令,启用它: sudo ufw enable 输出如下: Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup 你将会被警告启用防火墙可能会中断现有的 SSH 连接,输入"y",并且回车。 七、打开端口 取决于运行在你服务器上的应用,你需要根据服务打开不同的端口。 通用的打开端口的语法如下: ufw allow port_number/protocol 下面是一些关于如何允许 HTTP 连接的方法。 第一个选项就是使用服务名。UFW 检查/etc/services文件,其中指定服务的端口和协议: sudo ufw allow http 你也可以指定端口号和协议: sudo ufw allow 80/tcp 当没有给出协议的时候,UFW 同时创建tcp和udp的规则。 另外一个选项就是使用应用程序配置。在这个例子中,是"Nginx HTTP": sudo ufw allow 'Nginx HTTP' UFW 还支持另外一种语法,使用 proto 关键字来指定协议。 7.1 端口范围 UFW 允许你打开端口范围。使用分号分隔开端口的起点和终点,当你指定协议时,或者是 tcp,或者是udp。 例如,如果你想允许端口从7100到7200,同时支持tcp和udp,你将要运行下面的命令: sudo ufw allow 7100:7200/tcp sudo ufw allow 7100:7200/udp 7.2 允许指定 IP 地址访问指定端口 想要允许指定源 IP 的所有端口上的所有连接通过,使用from关键字,加上源地址。 这里是一个 IP 地址白名单的例子: sudo ufw allow from 64.63.62.61 如果你指向允许给定 IP 访问指定的端口,使用to any port关键字加上端口号。 例如,允许从 IP64.63.62.61的机器,通过22端口访问,输入: sudo ufw allow from 64.63.62.61 to any port 22 7.3 允许子网 允许一个子网 IP 地址的访问和允许一个单个 IP 地址的访问,命令是一样的。唯一的不同是需要指定网络掩码。 下面是一个例子,显示如何允许 IP 地址(192.168.1.1 到 192.168.1.254),通过 3360(MySQL),你可以使用这个命令: sudo ufw allow from 192.168.1.0/24 to any port 3306 7.4 允许指定网络接口的连接 想要允许连接通过指定网络接口,使用allow in on 和 网络接口的名字: sudo ufw allow in on eth2 to any port 3306 八、禁止连接 对于所有进来连接的默认的策略被设置为deny,如果你没有修改它,UFW 将会屏蔽所有进来的连接,除非你指定打开连接。 写禁止规则和写允许规则是一样的,你需要的仅仅是使用deny关键字替换allow。 比如说你打开了端口80和443,并且你的服务器处于来自23.24.25.0/24网络的攻击。想要禁止来自23.24.25.0/24的所有连接,使用下面的命令: sudo ufw deny from 23.24.25.0/24 这里是一个例子,关于禁止从23.24.25.0/24对80和443端口的访问,你可以使用下面的命令: sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443 九、删除 UFW 规则 有两种不同的方式可以删除 UFW 规则。通过规则序号和通过指定的规则。 通过规则序号来删除 UFW 规则很简单,特别是你刚接触 UFW。 想要通过规则序号来删除,你需要找到你想删除的规则序号。想要这么做,运行下面的命令: sudo ufw status numbered 输出: Status: active To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN Anywhere [ 2] 80/tcp ALLOW IN Anywhere [ 3] 8080/tcp ALLOW IN Anywhere 想要删除规则,序号为3,这个规则允许对端口8080的连接,你可以使用下面的命令: sudo ufw delete 3 删除规则的第二种方法就是指定实际的规则。例如,如果你添加过一个打开端口8069的规则,你可以通过下面的命令删除它: sudo ufw delete allow 8069 十、禁用 UFW 如果因为任何原因,你需要停止 UFW,并且使得所有规则失效,你可以运行: sudo ufw disable 稍后,如果你想重新启用 UFW,并且激活所有规则,输入: sudo ufw enable 十一、重置 UFW 重置 UFW 将会禁用 UFW,删除所有激活的规则。如果你想撤销所有的应用规则,并且重新开始时,这个很有用。 想要重置 UFW,简单输入下面的命令: sudo ufw reset 十二、IP 伪装 IP 伪装是一种在 Linux内核中的 NAT(网络地址转换),它通过重写源 IP 和目标 IP 的地址和端口,来转换网络流量。使用 IP 伪装技术,你可以允许局域网中的一台或者多台机器,和互联网进行交互,其中的一台 Linux 机器扮演网关。 使用 UFW 配置 IP 伪装需要几个步骤: 首先,你需要启用 IP 转发。想要这么做,打开/etc/ufw/sysctl.conf文件: sudo nano /etc/ufw/sysctl.conf 查找并且取消这一行的注释net.ipv4.ip_forward = 0: net/ipv4/ip_forward=1 下一步,你需要配置 UFW 来允许转发包。打开 UFW 配置文件: sudo nano /etc/default/ufw 定位到DEFAULT_FORWARD_POLICY处,修改值从DROP到ACCEPT: DEFAULT_FORWARD_POLICY="ACCEPT" 现在你需要设置在nat表和伪装规则中默认的POSTROUTING策略。想要这么做,打开/etc/ufw/before.rules文件,并且附加下面的行进去,像下面这样: sudo nano /etc/ufw/before.rules 附加下面的行: #NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Forward traffic through eth0 - Change to public network interface -A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE # don't delete the 'COMMIT' line or these rules won't be processed COMMIT 不要忘记将-A POSTROUTING一行中的eth0替换成你的公开网络接口的名字: 当你做完这些,保存,并且关闭文件。 最后,通过禁用,重新启用 UFW,重载 UFW 规则。 sudo ufw disable sudo ufw enable 十三、总结 我们已经向你展示了如何在你的 Ubuntu 20.04 服务器上安装和配置 UFW 防火墙。在限制所有不必要连接时,请确保系统正常运行所需要的允许进来的连接。 想要了解更多关于这个主题的信息,请浏览 UFW 手册页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-set-or-change-timezone-on-ubuntu-20-04/ 使用正确的时区,对于系统相关的任务和进程来说,是最基本的。例如,cron 守护进程,使用系统时区来执行定时任务,并且在日志中的时间戳也是基于相同的系统时区。 在 Ubuntu 上,系统时区通常在安装的时候设置,但是可以很容易地在后面进行修改。 本文描述了如何使用命令行或者 GUI 界面在 Ubuntu 20.04 上设置或者修改时区。 一、前提条件 以 root 身份或者其他的sudo 用户身份设置或者修改系统时区。 二、检查当前的系统时区 timedatectl是一个命令行工具,它允许你查看或者修改系统的时间和日期。它在所有现代的基于 System 的 Linux 系统中都可以使用,包括 Ubuntu 20.04. 想要打印当前系统时区,不带参数运行timedatectl。 timedatectl 下面的输出显示系统时区被设置为"UTC": Local time: Wed 2020-05-06 19:33:20 UTC Universal time: Wed 2020-05-06 19:33:20 UTC RTC time: Wed 2020-05-06 19:33:22 Time zone: UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no 系统时区通过链接文件/etc/localtime配置,该链接指向/usr/share/zoneinfo目录下的一个二进制时区标识文件。另外一个检查时区的方法就是显示这个链接文件指向的实际路径,使用ls命令: ls -l /etc/localtime lrwxrwxrwx 1 root root 27 Dec 10 12:59 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC 系统的时区同时也被写入/etc/timezone文件: cat /etc/timezone UTC 三、使用timedatectl命令修改时区 在修改时区时,你将需要找到你想要使用的时区的一个很长的名字。时区通常使用"地区/城市"格式. 想要列出所有可用的时区,你可以列出/usr/share/zoneinfo目录下的所有文件,或者运行timedatectl命令,加上list-timezones选项: timedatectl list-timezones ... America/Montevideo America/Nassau America/New_York America/Nipigon America/Nome America/Noronha ... 一旦你识别出哪一个时区能准备描述你的位置,以 root 或者其他有 sudo 权限的用户身份,运行下面的命令: sudo timedatectl set-timezone your_time_zone 例如,想要将系统时区设置为America/New_York: sudo timedatectl set-timezone America/New_York 运行timedatectl命令去验证修改: timedatectl Local time: Wed 2020-05-06 15:41:42 EDT Universal time: Wed 2020-05-06 19:41:42 UTC RTC time: Wed 2020-05-06 19:41:48 Time zone: America/New_York (EDT, -0400) System clock synchronized: yes NTP service: active RTC in local TZ: no 四、使用 GUI 修改时区 如果你正在运行 Ubuntu 桌面版,你还可以通过 GUI 来修改当前系统时区。 01.点击系统图标,打开系统设置窗口,像下图一样: 02.在系统设置窗口,点击Date & Time标签。如果Automatic Time Zone被打开,并且你拥有互联网连接,定位服务也开启了,那么根据你的位置,你的时区应该已经被自动设置好了。 03.想要选择新时区,你需要点击地图,或者通过搜索栏,搜索一个时区。 一旦完成,点击x来关闭窗口。 五、总结 我们已经向你展示如何修改你的 Ubuntu 系统的时区。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-visual-studio-code-on-ubuntu-20-04/ Visual Studio Code 是一个由微软开发的强大的开源代码编辑器。它包含内建的调试支持,嵌入的 Git 版本控制,语法高亮,代码自动完成,集成终端,代码重构以及代码片段功能。 Visual Studio Code 是跨平台的,在 Windows, Linux, 和 macOS 上可用。 这篇指南显示了两种在 Ubuntu 20.04 上安装 Visual Studio Code 的方式。 VS Code 可以通过 Snapcraft 商店或者微软源仓库中的一个 deb 软件包来安装。 选择最适合你的环境的安装方式。 一、作为一个 Snap 软件包安装 Visual Studio Code Visual Studio Code snap 软件包由微软来进行分发和维护。 Snaps 是一种自包含的软件包,它包含需要运行这个应用所有的依赖。 Snap 软件包容易升级,并且非常安全。和标准的 deb 软件包不同,snaps 需要占用更大的磁盘空间,和 更长的应用启动时间。 Snap 软件包可以通过命令行或者 Ubuntu 软件应用来安装。 想要安装 VS Code snap版,打开你的终端(Ctrl+Alt+T)并且运行下面的命令: sudo snap install --classic code 就这些。Visual Studio Code 已经在你的 Ubuntu 机器上安装好了,你可以开始使用它了。 如果你喜欢使用 GUI 图形界面,打开 Ubuntu 软件中心,并且搜索“Visual Studio Code”,然后安装应用: 不管何时,当新版本发布时,Visual Studio Code 软件包都会在后台被自动升级。 二、使用 apt 安装 Visual Studio Code Visual Studio Code 在官方的微软 Apt 源仓库中可用。想要安装它,按照下面的步骤来: 01.以 sudo 用户身份运行下面的命令,更新软件包索引,并且安装依赖软件: sudo apt update sudo apt install software-properties-common apt-transport-https wget 02.使用 wget 命令插入 Microsoft GPG key : wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - 启用 Visual Studio Code 源仓库,输入: sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" 03.一旦 apt 软件源被启用,安装 Visual Studio Code 软件包: sudo apt install code 当一个新版本被发布时,你可以通过你的桌面标准软件工具,或者在你的终端运行命令,来升级 Visual Studio Code 软件包: sudo apt update sudo apt upgrade 三、启动 Visual Studio Code 在 Activities 搜索栏输入 "Visual Studio Code",并且点击图标,启动应用。 当你第一次启动 VS Code 时,一个类似下面的窗口应该会出现: 你可以开始安装插件,并且根据你的喜好配置 VS Code 了。 VS Code 也可以通过在终端命令行输入code进行启动。 四、总结 我们将会讲解如何在 Ubuntu 20.04 上安装 VS Code。 现在你可以开始安装新插件,并且定制化你的工作区。想要了解更多关于 VS Code 的信息,浏览他们的官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
111Nginx 发音 “engine x” ,是一个开源软件,高性能 HTTP 和反向代理服务器,用来在互联网上处理一些大型网站。它可以被用作独立网站服务器,负载均衡,内容缓存和针对 HTTP 和非 HTTP 的反向代理服务器。 和 Apache相比,Nginx 可以处理大量的并发连接,并且每个连接占用一个很小的内存。 本文描述如何在 Ubuntu 20.04上安装和管理 Nginx。 一、前提条件 在继续之前,保证以 sudo 用户身份登录,并且你不能运行 Apache 或者 其他处理进程在80端口和443端口。 二、安装 Nginx Nginx 在默认的 Ubuntu 源仓库中可用。想要安装它,运行下面的命令: sudo apt update sudo apt install nginx 一旦安装完成,Nginx 将会自动被启动。你可以运行下面的命令来验证它: sudo systemctl status nginx 输出类似下面这样: ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 20:25:43 UTC; 13s ago ... 三、配置防火墙 现在你已经在你的服务器上安装和运行了 Nginx,你需要确保你的防火墙被配置好,允许流量通过 HTTP(80)和 HTTPS(443)端口。假设你正在使用UFW,你可以做的是启用 ‘Nginx Full’ profile,它包含了这两个端口: sudo ufw allow 'Nginx Full' 想要验证状态,输入: sudo ufw status 输出将会像下面这样: Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere Nginx Full ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) 四、测试安装 想要测试你的新 Nginx 安装,在你的浏览器中打开http://YOUR_IP,你应该可以看到默认的 Nginx 加载页面,像下面这样: 五、Nginx 配置文件结构以及最佳实践 所有的 Nginx 配置文件都在/etc/nginx/目录下。 主要的 Nginx 配置文件是/etc/nginx/nginx.conf。 为每个域名创建一个独立的配置文件,便于维护服务器。你可以按照需要定义任意多的 block 文件。 Nginx 服务器配置文件被储存在/etc/nginx/sites-available目录下。在/etc/nginx/sites-enabled目录下的配置文件都将被 Nginx 使用。 最佳推荐是使用标准的命名方式。例如,如果你的域名是mydomain.com,那么配置文件应该被命名为/etc/nginx/sites-available/mydomain.com.conf 如果你在域名服务器配置块中有可重用的配置段,把这些配置段摘出来,做成一小段可重用的配置。 Nginx 日志文件(access.log 和 error.log)定位在/var/log/nginx/目录下。推荐为每个服务器配置块,配置一个不同的access和error。 你可以将你的网站根目录设置在任何你想要的地方。最常用的网站根目录位置包括: /home/<user_name>/<site_name> /var/www/<site_name> /var/www/html/<site_name> /opt/<site_name> 六、总结 我们已经向你展示了如何在 Ubuntu 20.04 上安装 Nginx。 你可以开始部署你的应用,并且使用 Nginx 作为一个网络或者代理服务器。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-go-on-ubuntu-20-04/ Go,通常被称为 golang,它是一门由 Google 创建的现代化的开源编程语言,它允许你构建实时并且高效的应用。 很多流行的应用程序,例如 Kubernetes,Docker,Prometheus 和 Terraform,都是使用 Go 来编写的。 这篇教程讲解如何在 Ubuntu 20.04 上下载和安装 Go。 一、在 Ubuntu 20.04 上安装 Go 完成下面的步骤,在 Ubuntu 20.04 上安装 Go 1.1 下载 Go 压缩包 在写这篇文章的时候,Go 的最新版为 1.14.2。在我们下载安装包时,请浏览Go 官方下载页面,并且检查一下是否有新的版本可用。 以 root 或者其他 sudo 用户身份运行下面的命令,下载并且解压 Go 二进制文件到/usr/local目录: wget -c https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local 1.2 调整环境变量 通过将 Go 目录添加到$PATH环境变量,系统将会知道在哪里可以找到 Go 可执行文件。 这个可以通过添加下面的行到/etc/profile文件(系统范围内安装)或者$HOME/.profile文件(当前用户安装): export PATH=$PATH:/usr/local/go/bin 保存文件,并且重新加载新的PATH 环境变量到当前的 shell 会话: source ~/.profile 1.3 验证 Go 安装过程 通过打印 Go 版本号,验证安装过程。 go version 输出应该像下面这样: go version go1.14.2 linux/amd64 二、Go 语言快速入门 想要测试 Go 安装过程,我们将会创建一个工作区,并且构建一个简单的程序,用来打印经典的"Hello World"信息。 01.默认情况下,GOPATH变量,指定为工作区的位置,设置为$HOME/go。想要创建工作区目录,输入: mkdir ~/go 02.在工作区内,创建一个新的目录src/hello: mkdir -p ~/go/src/hello 在那个目录下,创建一个新文件,名称为hello.go: package main import "fmt" func main() { fmt.Printf("Hello, World\n") } 想要学习更多关于 Go 工作区的目录,浏览 Go 文档页面。 03.浏览到~/go/src/hello目录,并且运行go build构建程序: cd ~/go/src/hello go build 上面的这个命令将会构建一个名为hello的可执行文件。 04.你可以通过简单执行下面的命令,运行这个可执行文件: ./hello 输出应该像下面这样: Hello, World 三、总结 现在你已经在你的 Ubuntu 系统上下载并安装了 Go,你可以开始开发你的 Go 项目了。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-git-on-ubuntu-20-04/ Git 是世界上最流行的分布式版本控制系统,它被众多的开源和商业项目所采用。它允许你和你的开发同事进行分工合作,跟踪你的代码变化,恢复前一个暂存区,创建分支等等。 Git 最初由 Linus Torvalds开发,他是 Linux 内核的创建者。 这篇指南讲解如何在 Ubuntu 20.04 上安装和配置 Git。 一、使用 Apt 安装 Git Git 软件包被包含在 Ubuntu 默认的软件源仓库中,并且可以使用 apt 包管理工具安装。这是在 Ubuntu 上安装 Git 最便利,最简单的方式。 如果你想要从 Git 源码上编译安装最新的 Git 版本,请关注『从源码安装 Git』一节。 安装非常直接,仅仅以 sudo 权限用户身份运行下面的命令: sudo apt update sudo apt install git 运行下面的命令,打印 Git 版本,验证安装过程: git --version 就在写作这篇文章的时候,在 Ubuntu 20.04 下 Git 当前可用版本是 2.25.1: git version 2.25.1 就这些。你已经成功地在你的 Ubuntu 上安装 Git,你可以开始使用它。 二、从源码安装 Git 从源码安装 Git 的最大优势就是你可以编译最新的 Git 发行版,并且定制编译选项。不管怎样,你将不能通过apt软件管理器维护你的 Git 安装过程。 开始安装依赖软件包,用来在你的 Ubuntu 系统上构建 Git: sudo apt update sudo apt install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev make gettext libz-dev libssl-dev libghc-zlib-dev 下一步,打开你的浏览器,浏览 Github 上的 Git 项目镜像 并且 拷贝最新的 以.tar.gz结尾的发行版链接 URL。就在写作这篇文章的时候,Git 最新稳定版本是2.26.2: 我们将会下载,并且解压 Git 源码到 /usr/src目录。这个目录通常被用来放置源代码。 wget -c https://github.com/git/git/archive/v2.26.2.tar.gz -O - | sudo tar -xz -C /usr/src 当下载完成时,切换源码目录,并且运行下面的命令来编译和安装 Git: cd /usr/src/git-* sudo make prefix=/usr/local all sudo make prefix=/usr/local install 编译过程会花费几分钟。一旦完成,验证安装过程,运行: git --version 输出如下: git version 2.26.2 稍后,当你想升级到一个 Git 新版本,使用同样的过程。 三、配置 Git 在你安装 Git 之后第一件事情,就是配置你的 Git 用户名和邮件地址。 Git 在每一次 commit 代码时关联你的身份。 想要设置全局的 commit 名字和邮件地址,运行下面的命令: git config --global username "Your Name" git config --global user.email "youremail@yourdomain.com" 你可以验证配置,输入: git config --list 输出看起来应该像这样: user.name=Your Name user.email=youremail@yourdomain.com 配置文件被存储在~/.gitconfig文件: [user] name = Your Name email = youremail@yourdomain.com 如果对 Git 配置做进一步修改,你可以使用git config命令(推荐方式)或者手动编辑~/.gitconfig文件。 四、总结 在 Ubuntu 上安装 Git 就是简简单单运行一个apt命令的事情。如果你想使用最新的 Git 发行版,你可以从源码编译它。 想要学习更多关于 Git 的知识,请浏览Pro Git book网站。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-mysql-on-ubuntu-20-04/ MySQL是最流行的开源关系数据库管理系统。它速度快,容易使用,容易扩展,并且流行的LAMP和LEMP的一部分。 这篇指南讲解了如何在 Ubuntu 20.04上安装和保护 MySQL。 一、前提条件 确保你以 sudo 用户身份登录 二、在 Ubuntu 上安装 MySQL 在写作这篇文章的时候,Ubuntu 源仓库中最新的 MySQL 版本号是 MySQL 8.0。想要安装它,运行下面的命令: sudo apt update sudo apt install mysql-server 一旦安装完成,MySQL 服务将会自动启动。想要验证 MySQL 服务器正在运行,输入: sudo systemctl status mysql 输出应该显示服务已经被启用,并且正在运行: ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-28 20:59:52 UTC; 10min ago Main PID: 8617 (mysqld) Status: "Server is operational" ... 三、保护加固 MySQL MySQL 安装文件附带了一个名为mysql_secure_installation的脚本,它允许你很容易地提高数据库服务器的安全性。 不带参数运行这个脚本: sudo mysql_secure_installation 你将会被要求配置VALIDATE PASSWORD PLUGIN,它被用来测试 MySQL 用户密码的强度,并且提高安全性: Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y 有三个级别的密码验证策略,低级,中级,高级。如果你想设置验证密码插件,按y或者其他任何按键,移动到下一个步骤: There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 下一次被提示时,你将被要求为 MySQL root 用户设置一个密码: Please set the password for root here. New password: Re-enter new password: 如果你设置了验证密码插件,这个脚本将会显示你的新密码强度。输入y确认密码: Estimated strength of the password: 50 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y 下一步,你将被要求移除任何匿名用户,限制 root 用户访问本地机器,移除测试数据库并且重新加载权限表。你应该对所有的问题回答y。 四、以 root 用户身份登录 使用 MySQl 客户端工具在命令行和 MySQL 服务器交互,这个 MySQL 客户端已经作为 MySQL 服务器安装包的依赖软件包被安装了。 在MySQL 8.0上,root 用户默认通过auth_socket插件授权。 auth_socket插件通过 Unix socket 文件来验证所有连接到localhost的用户。这意味着你不能通过提供密码,验证为 root。 以 root 用户身份登录 MySQL服务器,输入; sudo mysql 你将会被展示MySQL shell,就像下面一样: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 如果你想以 root 身份登录 MySQL 服务器,使用其他的程序,例如 phpMyAdmin,你有两个选择。 第一个就是将验证方法从auth_socket修改成mysql_native_password。你可以通过运行下面的命令实现: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password'; FLUSH PRIVILEGES; 第二个选项,推荐的选项,就是创建一个新的独立管理用户,拥有所有数据库的访问权限: GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'localhost' IDENTIFIED BY 'very_strong_password'; 五、总结 我们已经向你展示如何在 Ubuntu 20.04 上安装 MySQL。现在你的数据库已经上线,并且运行,你的下一步就是学习如何管理 MySQL 用户和数据库。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-force-nginx-redirect-to-www-and-https/ 一、简介 如何强制 Nginx 将全站转向 WWW 和 HTTPS? 下面我们以域名 example.com 进行举例,我们的目标是: http://example.com -> https://www.example.com https://example.com -> https://www.example.com http://www.example.com -> https://www.example.com https://www.example.com 二、如何强制 Nginx 将全站转向 WWW 和 HTTPS 01.在 /etc/nginx/conf.d目录下,新建配置文件example.com.conf 02.将下面的配置内容,拷贝到新建的配置文件中,保存并退出。 server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; return 301 https://www.example.com$request_uri; } server { listen *:443 ssl; listen [::]:443 ssl; server_name example.com; return 301 https://www.example.com$request_uri; } server { listen *:443 ssl http2; listen [::]:443 ssl http2; server_name www.example.com; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Frame-Options "DENY"; charset utf8; access_log /var/log/nginx/*.example.com/access.log main; error_log /var/log/nginx/*.example.com/error.log warn; location / { root /root/itcoder/public; index index.html index.htm; } # ssl on; ssl_certificate /etc/nginx/ssl/*.example.com.crt; ssl_certificate_key /etc/nginx/ssl/*.example.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; ssl_prefer_server_ciphers on; error_page 404 /404.html; # location = /404.html { # root /usr/share/nginx/html; # } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 03.运行下面的命令,检测配置文件是否合规: nginx -t 如果配置文件没有语法错误,一般会提示如下: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 04.重新加载 Nginx 配置文件,使修改生效。 nginx -s reload 或者 systemctl reload nginx 三、总结 本站经过改造,已经强制 Nginx 将全站转向 WWW 和 HTTPS,欢迎体验。 http://itcoder.tech -> https://www.itcoder.tech https://itcoder.tech -> https://www.itcoder.tech http://www.itcoder.tech -> https://www.itcoder.tech https://www.itcoder.tech 四、参考文档 Redirect HTTP to HTTPS in Nginx Redirect all HTTP requests to HTTPS with Nginx Best way to redirect all HTTP requests to HTTPS with Nginx
本文最先发布在: 如何升级到 Ubuntu 20.04 Ubuntu 20.04 LTS (Focal Fossa) 发布于2020年4月23日,并且它将会被支持5年。它带来了很多新的软件包和主要软件包的升级,包括最新版的OpenJDK, GCC, Python, Ruby, 和 PHP。这个发布是基于 Linux 5.4 LTS 内核 ,并且添加了新的硬件和文件系统支持。桌面版本使用 GNOME 3.36 和一个新的默认主题 Yaru。 这个指南讲解了如何从 Ubuntu 18.04 或者 Ubuntu 19.10 升级到 Ubuntu 20.04 LTS。 一、前提条件 你可以从 Ubuntu 18.04 或者 Ubuntu 19.10 直接升级到 版本 20.04。 如果你运行任何之前的发行版本,你必须先升级到 18.04 或者 19.10。 这个升级操作必须以超级用户的权限进行运行。你需要以 root 或者其他有 sudo 权限的用户身份登录系统。 二、备份你的数据 首先并且最重要的事情,请确保在你的操作系统进行重大升级之前,备份好你的数据。如果你正在虚拟机上运行 Ubuntu,你最好先做一个完整的系统快照,以便在系统升级出现问题时,快速恢复你的机器。 三、升级当前已经安装的软件包 在开始版本升级之前,我们推荐你将所有当前安装的软件包升级到它们的最新版。 所有被标记为锁定版本的软件包都不能被自动安装,升级或者移除。这将可能会在升级过程中造成问题。想要检查你的系统上是否有被锁住版本的软件包: sudo apt-mark showhold 如果有on hold,软件包,你应该考虑使用下面的命令,解锁这些软件包: sudo apt-mark unhold package_name 刷新APT 列表,并且升级所有的已安装软件包: sudo apt update sudo apt upgrade 如果内核被升级,重启机器,并且一旦启动完成,重新登录进去: sudo systemctl reboot 对于所有已经安装的软件包执行一个主要版本升级: sudo apt full-upgrade apt full-upgrade可能会移除一些不必要的软件包。 移除任何被自动安装的,但是不再被任何包所依赖的软件包: sudo apt --purge autoremove 四、升级到 Ubuntu 20.04 LTS (Focal Fossa) 升级到最新的 Ubuntu 版本是一个很简单直接的过程。你可以通过图形升级工具,或者在命令行中执行do-release-upgrade来升级。 我们将会从命令行进行升级,这适合于桌面版和服务器版本系统。 do-release-upgrade是 “update-manager-core” 软件包的一部分,而该软件包在大多数的 Ubuntu 系统上都已经默认安装了。如果因为一些原因,在你的系统上,该软件包没有被安装,通过下面的命令安装它: sudo apt install update-manager-core 开始升级,输入: sudo do-release-upgrade -d 这个命令将会禁用所有的第三方软件源,并且将 apt 列表指向 focal 软件源。你将会被提示几次,进行确认,是否真的需要继续升级。当你被问到服务是否在升级过程中自动重启,请输入:y。 在升级过程中,命令将会问你各种问题,比如你是否想要保存已经存在的配置文件,或者安装软件版的维护者版本。如果你没有对配置文件做任何自定义修改,最安全的做法就是输入:Y。否则,我们推荐你保持当前的配置文件。在你做出选择之前,仔细阅读问题。 升级过程将会在一个 GNU 屏幕会话中运行,并且在连接丢失时,自动继续。 整个过程将会花费一些时间,具体依赖于你的升级的软件包数目和你的网速。 一旦新的软件包都被安装了,升级工具将会询问你是否移除旧的软件。如果你不确定,输入d并且检查这些旧的软件包列表。通常情况下,输入y并且移除所有旧的软件包都是安全操作。 当升级过程完成,并且假设所有操作都很顺利,你将被提示是否重启你的机器。 输入y继续: System upgrade is complete. Restart required To finish the upgrade, a restart is required. If you select 'y' the system will be restarted. Continue [yN] y 五、确认升级 等待几分钟,直到你的系统启动,并且登录进去。 如果你是一个桌面版本用户,你将会看到一个新的图形启动界面和登录屏幕。 你可以输入下面的命令,检查 Ubuntu 版本: lsb_release -a 输出: No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04 LTS Release: 20.04 Codename: focal 就这些。你的新 Ubuntu 20.04 安装完成。 六、总结 升级到 Ubuntu 20.04 LTS 相对简单,并且无副作用。 如果你遇到问题,请参考 发行页面,那里记录了一些在升级过程中可能发生的已知问题。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-and-use-composer-on-centos-8/ Composer 是一个 PHP 依赖管理器(类似于 Node.js 的 npm,或者 Python 的 pip)。 Composer 将会拉取你的项目所依赖的所有 PHP 软件包,并且为你管理它们。它被所有现代化的 PHP 框架和平台所使用,例如: Laravel, Symfony, Drupal, 和 Magento 2。 这篇指南将会介绍在 CentOS 8 上安装 Composer 的几个步骤。如果你很着急,并且不想验证文件完整性,往下滑动到 "快速安装 Composer" 这一节。 一、前提条件 确保在继续下面的步骤之前,你满足了下面的前提条件: 以拥有 sudo 权限的用户身份登录 已经在 你的 CentOS 8 系统上安装了 PHP 二、在 CentOS 上安装 Composer 在 CentOS 8 上执行下面的步骤,安装 Composer。 01.安装 PHP CLI(命令行界面)软件包和其他所有的依赖软件包: sudo dnf install php-cli php-json php-zip wget unzip 02.一旦 PHP CLI 被安装,下载 Composer 安装脚本: php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 上面的这个命令将会在当前工作目录下载一个名为 composer-setup.php的文件。 03.验证文件的完整性,将文件的SHA-384哈希值和omposer Public Keys / Signatures页面的哈希值进行比对。 下面的 wget 命令将会从 Composer 的 Github 页面下载最新的 Composer签名,然后存储为一个变量,名字为HASH。 HASH="$(wget -q -O - https://composer.github.io/installer.sig)" 想要验证安装脚本是否损坏,运行下面的命令: php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 如果 哈希值匹配,下面的信息将会被展示: Installer verified 否则,如果哈希值不匹配,那么你将会看到Installer corrupt。一旦完整性通过验证,请继续接下来的步骤。 04.运行下面的命令,将 Composer 安装到/usr/local/bin目录: sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer 上面的命令将composer安装成一个系统范围的命令,所有用户都可以使用。输出将会像这样: All settings correct for using Composer Downloading... Composer (version 1.10.1) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer 05.通过打印 Composer 的版本,验证安装是否成功: composer -V Composer version 1.10.1 2020-03-13 20:34:27 此时,你已经在你的 CentOS 系统上成功安装了 Composer,你可以开始使用它了。 三、安装 Composer【快速方式】 执行下面的步骤,在你的 CentOS 8 系统上快速安装 Composer: 01.安装 PHP CLI 和 ZIP: sudo dnf install php-cli php-json php-zip curl unzip 02.使用 curl 安装 Composer: curl -sS https://getcomposer.org/installer |php 03.移动 Composer 文件 到 /usr/local/bin目录: sudo mv composer.phar /usr/local/bin/composer 四、开始使用 Composer 现在 Composer 在你的 CentOS 系统上安装好了,我们将会向你展示如何在一个 PHP 项目中使用 Composer。 开始创建项目,并且切换到项目根目录: mkdir ~/my-first-composer-project cd ~/my-first-composer-project 在这个例子中,我们将会使用一个名为 carbon的 PHP 软件包来创建一个简单的应用。该应用主要用来打印当前时间。 运行下面的命令来初始化一个新的 Composer 项目,并且安装 carbon 软件包: composer require nesbot/carbon sing version ^2.32 for nesbot/carbon ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 4 installs, 0 updates, 0 removals - Installing symfony/translation-contracts (v2.0.1): Downloading (connecting..Downloading (100%) - Installing symfony/polyfill-mbstring (v1.15.0): Downloading (100%) - Installing symfony/translation (v5.0.6): Downloading (100%) - Installing nesbot/carbon (2.32.1): Downloading (100%) symfony/polyfill-mbstring suggests installing ext-mbstring (For best performance) symfony/translation suggests installing symfony/config symfony/translation suggests installing symfony/yaml symfony/translation suggests installing psr/log-implementation (To use logging capability in translator) Writing lock file Generating autoload files 3 packages you are using are looking for funding. Use the `composer fund` command to find out more! 就像你从上面的输出所看到的,Composer 创建了一个名为composer.json的文件,并且下载了 carbon 和它的所有依赖软件包。 如果你列出你的项目目录,你将看到它包含了composer.json 和 composer.lock,还有一个 vendor目录。 ls -l -rw-rw-r--. 1 vagrant vagrant 60 Mar 27 18:05 composer.json -rw-rw-r--. 1 vagrant vagrant 11135 Mar 27 18:06 composer.lock drwxrwxr-x. 6 vagrant vagrant 82 Mar 27 18:06 vendor vendor是项目依赖软件包储存的目录。 composer.lock文件包含了一个所有已经安装依赖软件包的清单,以及它们的版本号。 composer.json是一个用来描述你的 PHP 项目的文件,它包含了 PHP 依赖软件包以及其他元信息。 你可以搜索 [Composer 源仓库](https://packagist.org/),获取更多 PHP 软件包。 Composer 拥有自动加载的能力,它允许你使用 PHP 类,而不用使用require和include声明。 创建一个名为testing.php的测试文件,并且添加下面的代码: <?php require __DIR__ . '/vendor/autoload.php'; use Carbon\Carbon; printf("Now: %s", Carbon::now()); 让我们一行一行分析代码。 第一行在一个开放的 PHP 标签后,我们包含了/vendor/autoload.php文件,它允许自动加载所有的类库。 下一步,我们将Carbon\Carbon关联为Carbon. 最后一行使用了Carbon打印现在的时间。 输入下面的命令,运行脚本: php testing.php 输出将会像下面这样: Now: 2020-03-27 22:12:26 稍后,如果你想升级你的 PHP 软件包,你只需简单运行: composer update 上面的这个命令,我们会检查所有已经安装的软件包是否有更新的版本,并且,如果有更新的版本,Composer 将会升级软件包。 五、总结 你已经学会如何在你的 CentOS 8 机器上安装 Composer。我们也已经向你展示了如何使用Composer来创建一个基础的 PHP 项目。 想要寻找更多关于 Composer 的信息,请浏览 Composer 官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-python-3-8-on-centos-8/ Python 是世界上被广泛使用的编程语言之一。语法简单易学,Python 是初学者和有工作经验者的一个很流行的选择。Python 是一个多功能的编程语言。它可以被用来构建各种应用程序,从简单的脚本到复杂的机器学习算法。 CentOS 8 包含了 Python 3.6,你可以通过dnf工具来安装或者升级 Python 到这个版本。 在写作的时候,Python 3.8 是 Python 语言最新的主要发行版。它包含了很多新的特性,包括 assignment expressions, positional-only parameters, f-strings support 等等。Python 3.8 在标准的 CentOS 8 软件源中不可用。 这篇指南讲解了在 CentOS 8 上如何从源码构建 Python 3.8。 我们还将向你展示如何创建一个虚拟环境。 一、 在 CentOS 8 上安装 Python 3.8 从源码编译 Python 需要 C/C++ 编译器和其他开发软件包。 第一件事情就是在 CentOS 8 上安装必要的软件包,以便从源码构建 Python。想要这么做,以 root 或者其他有 sudo 权限用户身份运行下面的命令: sudo dnf groupinstall 'development tools' sudo dnf install bzip2-devel expat-devel gdbm-devel \ ncurses-devel openssl-devel readline-devel \ sqlite-devel tk-devel xz-devel zlib-devel wget 使用wget从Python 下载页面下载最新的源代码。现在,Python 3.8 最新的版本号是:3.8.1。 如果有更新的用于下载的版本,修改下面命令行中的VERSION变量: VERSION=3.8.1 wget https://www.python.org/ftp/python/${VERSION}/Python-${VERSION}.tgz 当下载完成,解压压缩包: tar -xf Python-${VERSION}.tgz 切换到 Python 源码目录,并且运行configure脚本。它会在你现在的系统上执行一些列的检测,来确保所有的依赖条件都已经满足: cd Python-${VERSION} ./configure --enable-optimizations --enable-optimizations选项通过运行多次测试,来优化 Python 二进制文件。这将会使得构建过程更慢。 通过运行下面的命令,开始 Python 3.8 的构建: make -j 4 根据你的处理器核心数来修改这个-j参数。你可以通过运行nproc来找到你的处理器核心数。 一旦构建过程结束,安装 Python 二进制文件: sudo make altinstall 请不要使用标准的make install,因为它会覆盖默认的系统 Python 二进制包。 就这些。Python 3.8 已经在你的 CentOS 系统上安装好了,你可以开始使用它了。输入下面的命令,验证一下: python3.8 --version 输出将会显示 Python 的版本号: Python 3.8.1 二、创建一个虚拟环境 Python 虚拟环境是一个自包含的目录树,它包含了一个 Python 安装和一系列额外的软件包。它允许你在指定项目的独立的位置上安装 Python 模块,而不是全局安装。通过这种方式,你不必担心会影响其他 Python 项目。 在这个例子中,我们将会在用户主目录下创建一个名为my_app的新的 Python 3.8项目。 首先,创建项目目录,并且切换到它: mkdir ~/my_app && cd ~/my_app 在项目根目录下运行下面的命令,创建一个虚拟环境,名为my_app_venv: python3.8 -m venv my_app_venv 激活这个环境: source my_app_venv/bin/activate 一旦激活,脚本提示符将会添加环境的名字作为前缀。从 Python 3.4开始,在创建虚拟环境的时候,pip,Python 的软件包管理器就会被默认安装。 在虚拟环境中,你可以使用pip替代pip 3.8和python替代python3.8: python -v Python 3.8.1 一旦你做完了所有工作,你可以停用这个环境。输入deactivate,你将会回到你的正常 shell。 deactivate 三、 总结 我们已经向你展示了如何在 CentOS 8 机器上安装 Python 3.8 并且创建一个虚拟环境。 现在你可以开始开发你的 Python3 项目了。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-configure-redis-on-centos-8/ Redis 是一个开源的在内存存储键值对数据的存储程序。它可以被用作数据库,缓存,信息暂存,并且支持各种数据结构,例如:字符串,哈希值,列表,集合等等。 Redis 通过 Redis Sentinel 和 Redis 集群中多个 Redis 节点的自动分块处理,提供了高可用性。 这篇指南涉及了在 CentOS 8 上安装和配置 Redis。 一、在 CentOS 8 上安装 Redis Redis 5.0 被包含在 CentOS 8 源仓库中。想要安装它,直接以 root 或者其他有 sudo 权限的用户身份运行下面的命令: sudo dnf install redis-server 一旦安装完成,启用并且启动 Redis 服务: sudo systemctl enable --now redis 检查 Redis 服务器是否正在运行,输入: sudo systemctl status redis ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Sat 2020-02-08 20:54:46 UTC; 7s ago 就这些。你已经在你的 CentOS 8 服务器上安装并运行了 Redis。 二、配置 Redis 远程访问 默认情况下,Redis 不允许远程连接。你仅仅只能从127.0.0.1(localhost)连接 Redis 服务器 - Redis 服务器正在运行的机器上。 如果你正在使用单机,数据库也同样在这台机器上,你不需要启用远程访问。 想要配置 Redis 来接受远程访问,使用你的文本编辑器打开 Redis 配置文件: sudo nano /etc/redis.conf 定位到以bind 127.0.0.1开头的一行,在127.0.0.1后面添加你的服务器局域网 IP 地址。 bind 127.0.0.1 192.168.121.233 确保将192.168.121.233替换为你自己的 IP 地址。保存文件,关闭文本编辑器。 如果你想 Redis 监听所有网络接口,仅仅注释掉这一行。 重启 Redis 服务,使应用生效: sudo systemctl restart redis 使用下面的ss命令来验证 Redis 服务器正在监听端口6379: ss -an | grep 6379 你应该能看到类似下面的信息: tcp LISTEN 0 128 192.168.121.233:6379 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* 下一步,你将需要配置你的防火墙,允许网络流量通过 TCP 端口6379。 通常你想要允许从一个指定 IP 地址或者一个指定 IP 范围来访问 Redis 服务器。例如,想要允许从192.168.121.0/24的连接,运行下面的命令: sudo firewall-cmd --new-zone=redis --permanent sudo firewall-cmd --zone=redis --add-port=6379/tcp --permanent sudo firewall-cmd --zone=redis --add-source=192.168.121.0/24 --permanent sudo firewall-cmd --reload 上面的命令创建一个名为redis的 zone,打开了端口6379 并且允许从局域网访问。 此时,Redis 服务器将会接受从6379 TCP 端口来的远程连接。 确保你的防火墙被配置好,仅仅接受来自可信 IP 范围的访问。 想要验证所有设置都设置好了,你可以尝试使用redis-cli从你的远程机器上 ping 一下 Redis 服务器。 redis-cli -h <REDIS_IP_ADDRESS> ping 这个命令将会返回一个响应:PONG PONG 三、总结 我们已经向你展示如何在 CentOS 8 上安装 Redis。想要了解更多关于如何使用 Redis 的信息,请访问它们的官方文档页面。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-configure-vnc-on-centos-8/ Virtual Network Computing (VNC) 是一个图形桌面共享系统,它允许你使用本地的键盘和鼠标来远程控制另外一台计算机。 本文涉及如何在 CentOS 8 上安装和配置 VNC 的步骤。我们将会向你展示,如何通过 SSH 隧道技术来安全连接到 VNC 服务器。 一、前提条件。 想要继续这篇指南,你需要以拥有 sudo 权限的用户身份登录远程 CentOS 机器上。 二、安装桌面环境 通常,服务器没有安装任何的桌面环境。如果你拥有的一台机器没有 GUI,第一步就是安装它。否则,跳过这个步骤。 运行下面的命令来在你的远程机器上安装 Gnome,CentOS 8 下的默认桌面环境。 sudo dnf groupinstall "Server with GUI" 依赖你的系统,下载和安装 Gnome 软件包,以及依赖软件包需要花费一些时间。 三、安装 VNC 服务器 TigerVNC 是一个维护很活跃的开源高性能 VNC 服务器。它在默认的 CentOS 源仓库中可用,输入下面的命令,安装它: sudo dnf install tigervnc-server 一旦 VNC 服务器被安装好,运行 vncserver 命令来创建初始化设置,并且设置密码。运行下面的命令时,不要使用 sudo: vncserver 你将会被提示输入并且确认一个密码,并且是否设置一个仅仅查看的密码。如果你选择设置一个仅仅查看的密码,这个用户将不能通过键盘和鼠标和 VNC 实例进行交互。 You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n /usr/bin/xauth: file /home/linuxize/.Xauthority does not exist New 'server2.linuxize.com:1 (linuxize)' desktop at :1 on machine server2.linuxize.com Starting applications specified in /etc/X11/Xvnc-session Log file is /home/linuxize/.vnc/server2.linuxize.com:1.log 第一次运行vncserver命令,它将会在~/.vnc目录下创建并且存储密码文件。如果该文件夹没有被创建,那么首先会创建该文件夹。 请留意上面主机名后面的:1。则表示 正在运行的 VNC 服务器上的显示端口号。在我们的例子中,服务器运行在 TCP 端口5901(5900+1)。如果你创建了第二个实例,他将会运行到下一个闲置的端口上,例如::2,这意味着,服务器运行在端口号5902(5900+2)上。 在和 VNC 服务器上工作的时候,最重要的一点就是,:X就是显示端口号,即:5900+X。 在继续下面的步骤之前,第一步通过使用vncserver命令加上-kill选项,停止 VNC 实例。在我们的例子中,服务器运行在端口号 5901(:1),因此,停止它,运行: vncserver -kill :1 输出如下: Killing Xvnc process ID 19681 四、配置 VNC 服务器 现在 Gnome 和 TigerVNC 都被安装在远程 CentOS 机器上,下一步就是配置 TigerVNC 去使用 Gnome。VNC 服务器使用~/.vnc/xstartup文件,在创建新桌面的时候,启动应用。打开这个文件: vim ~/.vnc/xstartup 并且编辑如下: #!/bin/sh [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources vncconfig -iconic & dbus-launch --exit-with-session gnome-session & 保存并且关闭文件。当你启动或者重启 TigerVNC 服务器的时候,上面的脚本将会被自动执行。 如果你想传递额外的选项给 VNC 服务器,打开~/.vnc/config文件,并且每行添加一个选项。最常用的选项都被列在文件中。取消注释,并且按照你的喜好来修改。 这里是一个例子: # securitytypes=vncauth,tlsvnc # desktop=sandbox geometry=1920x1080 # localhost # alwaysshared 五、创建一个 Systemd Unit 文件 Unit files 允许你很容易地启动,停止,和重启服务。通常情况下,存储用户 unit 文件的最好位置是~/.config/systemd/user。创建文件夹: mkdir -p ~/.config/systemd/user 拷贝默认的 vncserver unit 文件: cp /usr/lib/systemd/user/vncserver@.service ~/.config/systemd/user/ 通知 systemd,一个新的用户 unit 文件已经存在: systemctl --user daemon-reload 启动 VNC 服务,并且启用开机启动: systemctl --user enable vncserver@:1.service --now 在@:后面的数字1定义了 VNC 服务将会监听的显示端口,我们将会使用1,这意味着 VNC 服务器将会监听我们在前面讨论过的5901端口。 启用 lingering 以便在用户没有登录时,用户服务可以保持开机启动并且保持运行状态。 loginctl enable-linger 验证服务是否成功启动,运行: systemctl --user status vncserver@:1.service ● vncserver@:1.service - Remote desktop service (VNC) Loaded: loaded (/home/linuxize/.config/systemd/user/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-01-30 22:14:08 UTC; 2s ago Process: 20813 ExecStart=/usr/bin/vncserver :1 (code=exited, status=0/SUCCESS) Process: 20807 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) CGroup: /user.slice/user-1000.slice/user@1000.service/vncserver.slice/vncserver@:1.service ... 六、连接到 VNC 服务器 VNC 不是一个加密协议,并且可以被包嗅探工具定位分析。推荐的访问方式,就是从你本地机器的5901端口到远程服务器的同一个端口之间 创建一个 SSH 隧道。 6.1 在 Linux 和 macOS 系统上设置 SSH 隧道 如果 你在你的机器上运行着 Linux,macOS 或者其他类Unix 操作系统,你可以很容易地使用下面的 ssh 命令来创建一个隧道: ssh -L 5901:127.0.0.1:5901 -N -f -l username remote_server_ip 你将会被提示输入用户密码。 不要忘记将username和server_ip_address替换成你自己的用户名和远程服务器 IP 地址。 6.2 在 Windows 上设置 SSH 隧道 Windows 上使用 Putty 来设置 SSH 隧道。 打开 Putty 并且在Host name or IP address文本域处输入你的服务器 IP 地址。 在Connection菜单下,展开SSH并且选择Tunnels。在文本域Source Port处输入 VNC 服务器端口(5901),在文本域Destination处输入server_ip_address:5901,并且像下图一样点击Add按钮: 返回Session页面保存设置,以便你不用每次都需要输入它们。想要登录远程服务器,选择保存的会话,并且点击Open按钮. 6.3 使用 Vncviewer 进行连接 想要连接你的远程服务器,打开你的 VNC 查看器并且输入localhost:5901。 你可以使用任何 VNC 查看器,例如: TigerVNC, TightVNC, RealVNC, UltraVNC, Vinagre, 和 VNC Viewer for Google Chrome。 我们使用 TigerVNC: 出现提示的时候,输入密码,你将会看到默认的 Gnome 桌面。它应该像下面这样: 就这些!现在你已经可以从你的本地机器上使用你的键盘和鼠标,在你的远程桌面上进行工作。 七、 总结 我们已经向你展示,如何在一个远程的 CentOS 8 机器上设置一个 VNC 服务器并且连接上去。 想要为多用户创建显示器,重复同样的步骤。创建初始化配置,使用vncserver命令设置密码,并且使用不同的端口创建一个新服务。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-set-up-nginx-server-blocks-on-centos-8/ 一个服务器配置块是一个 Nginx 指令,它定义了对于一个指定域名的设置,允许你在一个单机服务器上运行多个网站。对于每一个网站,你可以设置网站文件根目录(包含网站文件的目录),创建一个独立的安全策略,使用不同的 SSL 证书等等。 本文描述了如何在 CentOS 8 上设置 Nginx 服务器块。 一、前提条件 在继续这个指南之前,请确保你满足了下面的前提条件: 指向你公共服务器 IP 的域名 在你的 CentOS 系统上安装了 Nginx 以 root 或者其他有 sudo 权限的用户身份登录 在一些文档中,术语Server Blocks也被称为Virtual host。一个虚拟主机是一个 Apache 的术语。 二、创建文件结构 文档根目录是每个域名对应网站文件所存储并且响应请求的地方。 文档根目录可以被设置到任何你想要设置的地方。 我们将会使用下面的文件夹结构: /var/www/ ├── example.com │ └── public_html ├── example2.com │ └── public_html ├── example3.com │ └── public_html 对于每一个被托管在服务器上的域名,我们将在/var/www目录下创建一个独立的文件夹。在文件夹域名文件夹下,我们创建一个public_html文件夹,它将作为域名的文件根目录,并且将会存储该域名的网站文件。 我们开始为域名example.com创建根目录: sudo mkdir -p /var/www/example.com/public_html 为了方便测试,我们在域名的文档根目录下创建一个index.html文件。 sudo nano /var/www/example.com/public_html/index.html 拷贝并且粘贴下面的代码到文件中: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Welcome to example.com</title> </head> <body> <h1>Success! example.com home page!</h1> </body> </html> 想要避免任何权限问题,修改域名的文档根目录的所有者到用户nginx: sudo chown -R nginx: /var/www/example.com 三、创建一个服务器块 在 CentOS 上,Nginx 服务器块配置文件默认以.conf结尾并且被存储在/etc/nginx/conf.d目录。 打开你的文本编辑器,并且为域名创建一个配置文件: sudo nano /etc/nginx/conf.d/example.com.conf 配置文件可以命名为任何你想要的名字,但是通常情况下,我们最好使用域名名字。 拷贝并且粘贴下面的代码到文件: server { listen 80; listen [::]:80; root /var/www/example.com/public_html; index index.html; server_name example.com www.example.com; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location / { try_files $uri $uri/ =404; } } 保存文件,并且检测 Nginx 配置文件是否有语法错误: sudo nginx -t 如果没有错误,输出将会像下面这样: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重启 Nginx 服务,使应用生效: sudo systemctl restart nginx 最后,验证服务器配置区块是否正常运行,在你的浏览器中打开http://example.com,你将会看到下面的画面: 四、总结 我们已经向你展示如何创建 Nginx 服务器配置块,并且在一个简单的 CentOS 服务器上托管很多域名。 你可以重复上面的步骤,并且为你所有的域名添加额外的服务器配置块。 如果你想要使用 SSL 证书加密你的网站,你可以生成并且安装一个免费的 Letsencrypt 免费SSL证书。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-ruby-on-centos-8/ Ruby 是当今最流行的语言之一。它有简洁的语法,并且是 Ruby on Rails 框架后面的语言。 在本文,我们将会在 CentOS 8 上探索通过不同的方式来安装 Ruby。 我们将会展示如何通过 CentOS 8 源仓库、 使用 Rbenv 、使用RVM 脚本来安装 Ruby。选择最适合你的环境的安装方式。 一、从 CentOS 源仓库安装 Ruby 这是在 CentOS 上最简单的安装方法。在写作的时候,标准 CentOS 源仓库上的 Ruby 版本是 2.5.5。 以 root 或者其他有 sudo 权限的用户身份,运行下面的命令,安装ruby软件包: sudo dnf install ruby 一旦安装完成,你可以通过打印 Ruby 版本号来验证是否成功安装了 Ruby。 ruby --version 输出应该像下面这样: ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux] 你的 Ruby 版本号可能与上面展示的不一样。 就这些。你已经在 CentOS 系统上成功地安装了 Ruby,并且可以开始使用它了。 二、使用 Rbenv 安装 Ruby Rbenv 是一个轻量级的 Ruby 版本管理工具,它允许你很方便地切换 Ruby 版本。 我们将会使用ruby-build插件来扩展 Rbenv 的核心功能,并且允许你从源码安装任何 Ruby 版本。 安装 git 和其他从源码编译 Ruby 所必需的其他依赖软件。 sudo dnf install git wget gcc bzip2 openssl-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel 运行下面的命令,安装rbenv 和 ruby-build: wget -q https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer -O- | bash 这个脚本将会把rbenv和ruby-build源代码从 Github 克隆到~/.rbenv目录。 在你开始使用rbenv之前,你需要将$HOME/.rbenv/bin添加到你的 PATH。 如果你正在使用 Bash,输入: echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc 如果你正在使用 Zsh,输入: echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc echo 'eval "$(rbenv init -)"' >> ~/.zshrc source ~/.zshrc 运行rbenv -v命令来确保安装成功: rbenv -v 输出如下: rbenv 1.1.2-17-g7795476 想要获取通过rbenv安装的所有可安装的 Ruby 版本,输入: rbenv install -l 例如,如果你想安装 Ruby 2.7.0,并且设置为默认的版本,你可以输入: rbenv install 2.7.0 rbenv global 2.7.0 打印 Ruby 版本号,验证 Ruby 是否被正确安装: ruby -v 输出: ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux] 三、使用 RVM 安装 Ruby RVM(Ruby Version Manager) 是一个命令行工具,它允许你安装,管理并且使用多个 Ruby 环境。 首先,安装rvm从源码构建 Ruby 所必需的依赖软件: sudo dnf install curl gcc bzip2 openssl-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel 运行下面的命令,导入 GPG 公钥,并且安装 RVM: gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB curl -sSL https://get.rvm.io | bash -s stable 想要开始使用 RVM,你需要运行下面的 source 命令: source ~/.rvm/scripts/rvm 想要获取所有已知的 Ruby 版本,输入: rvm list known 对于这个例子,你想安装 Ruby 2.6并且设置为默认版本,你可以触发下面的命令: rvm install 2.6 rvm use 2.6 --default 验证安装: ruby -v 输出如下: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux] 想要获取更多关于如何使用 RVM 管理 Ruby 安装的信息,请浏览 RVM 文档页面。 四、总结 我们已经向你展示在你的 CentOS 8 服务器上安装 Ruby 的三种不同方式。你根据你的要求和偏好选择其中一种方式。即使通过 CentOS 源仓库来安装 Ruby 的方式比较简单,但是 Rbenv 和 RVM 方式给你更多选择,你可以为每个用户添加或者移除不同的 Ruby 版本。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-teamviewer-on-centos-8/ TeamViewer 是一个跨平台解决方案,它可以被用来进行远程控制,桌面共享,在线会议,以及计算机之间的文件传输。 TeamViewer 是一个专有计算机软件,它不被包含在 CentOS 的源仓库中。 本文描述了如何在 CentOS 8 上安装 TeamViewer。 一、前提条件 你需要以 root 或者其他拥有 sudo 权限的用户身份登录,以便可以在你的 CentOS 系统上安装 软件包。 二、在 CentOS 上安装 TeamViewer 执行下面的步骤,在 CentOS 8 上安装 TeamViewer。 01.TeamViewer 依赖的软件包都在 EPEL 软件源仓库中。如果 EPEL 在你的系统上没有被启用,输入下面的命令,启用它: sudo dnf install epel-release 02.输入下面的命令,导入 TeamViewer 源仓库的 GPG keys: sudo rpm --import https://dl.tvcdn.de/download/linux/signature/TeamViewer2017.asc 03.输入下面的命令,安装 TeamViewer 的 rpm软件包: sudo dnf install https://download.teamviewer.com/download/linux/teamviewer.x86_64.rpm 当出现提示的时候,输入y继续安装过程。 此时,你已经在你的 CentOS 8 机器上成功安装了 TeamViewer。 你现在可以连接到你的朋友或者客户的计算机,并且帮助他们解决问题。 三、启动 TeamViewer TeamViewer 可以通过以下两种方式启动:1. 在命令行输入teamviewer 2.点击 TeamViewer 图标(应用->网络->TeamViewer): 当你第一次启动 TeamViewer 的时候,你将会被提示接受用户协议: 点击用户协议上的按钮,接受用户协议,并且一个类似下面的窗口将会显示: 四、升级 TeamViewer 在安装过程中,官方 TeamViewer 源仓库将会被添加到你的系统中。你可以使用 cat 命令来验证文件内容: cat /etc/yum.repos.d/teamviewer.repo [teamviewer] name=TeamViewer - $basearch baseurl=http://linux.teamviewer.com/yum/stable/main/binary-$basearch/ gpgkey=http://linux.teamviewer.com/pubkey/currentkey.asc gpgcheck=1 enabled=1 type=rpm-md failovermethod=priority 当一个新版本通过你的桌面标准软件升级工具发布时,这将确保你的TeamViewer可以被自动升级。 五、总结 我们将会向你展示如何在 CentOS 8 上安装TeamViewer。想要了解更多关于 TeamViewer的信息,请浏览 官方知识库。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群: 加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文最先发布在: https://www.itcoder.tech/posts/how-to-setup-ftp-server-with-vsftpd-on-centos-8/ FTP (文件传输协议) 是一个客户端-服务端 网络协议,它允许用户在本地客户端和远程服务器之间传输文件。 在 Linux 上有很多开源的 FTP 服务器可用。最流行并且最常被使用的服务器包括PureFTPd, ProFTPD, and vsftpd. 在这篇指南中,我们将会在 CentOS 8 上安装 vsftpd (Very Secure Ftp Daemon)。它是一个稳定的,安全的,并且快速的 FTP 服务器。我们将会向你展示如何配置 vsftpd 来限制用户访问他们的主目录,并且使用 SSL/TLS 来加密数据传输。 一、 在 CentOS 8 上安装 vsftpd vsftpd 软件包在默认的 CentOS 源仓库中可用。想要安装它,以 root 或者其他有 sudo 权限的用户身份运行下面的命令: sudo dnf install vsftpd 一旦软件包被安装,启动 vsftpd 守护程序,并且启用开机自动启动: sudo systemctl enable vsftpd --now 验证服务器状态: sudo systemctl status vsftpd 输出将会像下面这样,显示 vsftpd 服务已经激活并且运行: ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s ago Process: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS) ... 二、 配置 vsftpd vsftpd 设置被存储在/etc/vsftpd/vsftpd.conf配置文件中。 文件中的大部分设置都在文档中有详细说明。想要查看所有的选项,浏览 vsftpd 官方网站页面。 在下面的章节中,我们将会一起看看一些配置vsftpd安全性相关的重要的设置。 打开 vsftpd 配置文件: sudo nano /etc/vsftpd/vsftpd.conf 2.1 FTP Access 我们仅仅允许本地用户可以访问 FTP 服务器,找到 anonymous_enable 和 local_enable 指令,并且确保你的配置像下面这样: anonymous_enable=NO local_enable=YES 2.2 允许上传 取消write_enable的注释,允许对文件系统的修改,例如 上传或者删除文件。 write_enable=YES 2.3 Chroot Jail 通过取消chroot指令的注释,阻止 FTP 用户 访问任何他们主目录外的文件。 chroot_local_user=YES 默认情况下,当chroot启用时,如果用户不允许写入一个文件夹,那么 vsftpd 会拒绝用户上传文件到该目录。 这是为了防止出现安全问题。 当chroot被启用时,使用下面的任何一种方法来允许上传。 方法一 - 这是通过启用chroot并且配置FTP目录来允许上传的一种推荐方式。在这个指南中,我们将会在用户主目录创建一个ftp目录,这个目录将会充当 chroot 并且一个可写的uploads目录用于上传文件。 user_sub_token=$USER local_root=/home/$USER/ftp 方法二 - 另一个选项就是在 vsftpd 配置文件中添加下面的指令。 使用这个选项,你必须授权你的用户对他的主目录写权限。 allow_writeable_chroot=YES 2.4 FTP 被动模式 vsftpd 可以使用 FTP 被动模式连接的任何端口。 我们将会指令一个最小端口和最大端口,稍后还要在防火墙中打开这个端口范围。 在配置文件中添加下面的行: pasv_min_port=30000 pasv_max_port=31000 2.5 限制用户登录 想要允许指定用户登录 FTP 服务器,在userlist_enable=YES一行下面添加下面的配置: userlist_file=/etc/vsftpd/user_list userlist_deny=NO 当这个选项启用时,你需要通过将用户名添加到/etc/vsftpd/user_list(一个用户一行)来明确指定哪些用户可以登录。 2.6 使用 SSL/TLS 加密传输 为了使用 SSL/TLS 加密 FTP 传输, 你需要一个 SSL 证书,并且配置 FTP 服务器使用它。 你可以使用一个由可信证书授权商颁发的SSL 证书或者创建一个 自建证书。 如果你由一个域名或者一个子域名指向 FTP 服务器的公网 IP 地址,你可以很容易生成一个免费的Let’s Encrypt SSL证书。 在这个指南中,我们将会使用openssl生成一个自签名的 SSL 证书。 下面的命令将会创建一个2048位的私钥 和 10年有效期的自签名证书。私钥和证书都被保存在同一个文件: sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem 一旦 SSL 证书被创建,打开 vsftpd 配置文件: sudo nano /etc/vsftpd/vsftpd.conf 找到rsa_cert_file 和 rsa_private_key_file 指令,修改它们的值到pam文件路径 并且设置ssl_enable指令到YES: rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES 如果没有指定其他的,那么 FTP 服务器将会仅仅使用 TLS 来进行安全连接。 2.7 重启 vsftpd 服务 一旦你完成编辑,vsftpd配置文件/etc/vsftpd/vsftpd.conf(排除注释)应该看起来像这样: anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=NO tcp_wrappers=YES user_sub_token=$USER local_root=/home/$USER/ftp pasv_min_port=30000 pasv_max_port=31000 rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES 保存文件并且重启 vsftpd 服务 使修改生效: sudo systemctl restart vsftpd 三、 打开防火墙 如果你正在运行 FTP 服务器,你需要允许 FTP 流量通过防火墙。 打开21端口(FTP 命令端口),20端口(FTP 数据端口) 和 30000-31000(被动模式端口范围),在你的防火墙中,输入下面的命令: sudo firewall-cmd --permanent --add-port=20-21/tcp sudo firewall-cmd --permanent --add-port=30000-31000/tcp 输入下面的命令,重新加载防火墙规则: firewall-cmd --reload 四、创建一个 FTP 用户 想要测试 FTP 服务器,你需要创建一个新用户。 如果你已经拥有一个用户,你仅仅需要让他可以访问 FTP 访问,跳过第一步。 如果你在配置中设置allow_writeable_chroot=YES,跳过第三部。 01.创建一个新用户,名称为newftpuser: sudo adduser newftpuser 下一步,你需要设置用户密码: sudo passwd newftpuser 02.添加用户到允许的 FTP 用户列表: echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list 03.创建 FTP 目录树,并且设置正确的权限: sudo mkdir -p /home/newftpuser/ftp/upload sudo chmod 550 /home/newftpuser/ftp sudo chmod 750 /home/newftpuser/ftp/upload sudo chown -R newftpuser: /home/newftpuser/ftp 正如前面所讨论的,用户将会被允许上传他们的文件到ftp/upload目录。 此时,你的 FTP 服务器完全可用,并且你可以使用任何可以配置 TLS 加密的 FTP客户端,例如 FileZilla 来连接你的 FTP 服务器。 五、禁用 Shell 访问 默认情况下,当创建一个用户时,如果没有明显的指定,这个用户将可以通过 SSH 访问到服务器。 想要禁用 shell 访问,我们将会创建一个新的 shell,它将会简单打印一个信息,告诉用户,他们仅仅被允许访问 FTP。 运行下面的命令来创建 /bin/ftponly shell 并且使它可执行: echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly sudo chmod a+x /bin/ftponly 将这个新的 shell 附加到/etc/shells文件中: echo "/bin/ftponly" | sudo tee -a /etc/shells 修改这个用户 shell 到/bin/ftponly: sudo usermod newftpuser -s /bin/ftponly 使用同样的命令来修改其他用户的 shell,限制他们仅仅只能通过 FTP 访问。 六、 总结 我们已经向你展示了如何在 CentOS 8 上安装和配置一个安全并且快速的 FTP 服务器。 想要更安全,更快速的数据传输,你应该使用 SCP 或者 SFTP。
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-tensorflow-on-centos-8/ TensorFlow是一个由Google 开发的,关于机器学习的开源平台。它可以在不同设备的 CPU 或者 GPU 上运行,并且它被很多组织所使用,其中包括Twitter, PayPal, Intel, Lenovo, 和 Airbus. TensorFlow 可以被作为系统范围内的安装,在 Python 虚拟环境中,作为一个 Docker 容器,或者和 Anaconda一起安装。 本文解释如何在 CentOS 8 上安装 TensorFlow。 TensorFlow 同时支持 Python 2 和 3。我们将会使用 Python 3 并且在一个虚拟环境中安装 TensorFlow。 一个虚拟环境允许你在一台电脑上拥有多个不同且互相隔离的 Python 环境,并且急于每个项目,安装模块的指定版本,而不用担心它会影响到其他的项目。 一、 在 CentOS 上安装 TensorFlow 与其他 Linux 发行版不一样,Python 在默认的 CentOS 8 上没有安装。想要在 CentOS 8 上安装 Python3,在终端中以 root 或者 sudo 用户身份运行下面的命令: sudo dnf install python3 上面的命令将会安装 Python 3.6 和 pip。想要运行 Python 3, 你需要输入 python3,输入 pip3 运行 pip。 从 Python 3.6 开始,创建一个虚拟环境的推荐方式就是使用 venv模块。 切换到一个目录,该目录是你用来存储你的 TensorFlow 项目的地方。它可以是你的主目录或者用户拥有读写权限的任何其他目录。 为了 TensorFlow 项目创建一个新目录,并且切换到目录下: mkdir tensorflow_project cd tensorflow_project 在这个目录下,运行下面的命令来创建一个虚拟环境: python3 -m venv venv 上面的这个命令创建了一个名为venv的目录,包含了 Python 二进制文件,pip 标准 Python 库,和其他支持文件。你可以使用任何你想要的名字命名该文件夹。 想要使用虚拟环境启动,输入以下命令激活它: source venv/bin/activate 一旦激活,虚拟环境的bin 目录将会被添加到$PATH环境辩论的前面。当然,你的 shell 提示符将会改变,它将会显示你使用的虚拟环境的名字。在这个例子中,显示venv。 TensorFlow 安装需要 pip 版本 19 或者更高。 运行下面的命令,将pip升级到最新版本: pip install --upgrade pip 现在虚拟环境已经被创建并且激活了,使用下面的命令安装 TensorFlow 库: pip install --upgrade tensorflow 如果你有一个独立的 NVIDIA GPU 并且你需要发挥它的处理能力,不要使用`tensorflow`包,而安装`tensorflow-gpu`软件包,它包含 GPU 支持。 在这个虚拟环境中,你可以使用命令`pip`替换 `pip3`,`python`替换 `python3` 想要验证安装,运行下面的命令,它将打印 TensorFlow的版本号: python -c 'import tensorflow as tf; print(tf.__version__)' 就在写这篇文章的时候,TensorFlow最新稳定版本是 2.1.0: 2.1.0 你的TensorFlow版本可能与展示的不一样。 如果你是一个 TensorFlow 新手,浏览Get Started with TensorFlow页面 并且学习如何构建你的第一个 ML 应用。你也可以从 Github 克隆 TensorFlow Models 或者 TensorFlow-Examples 并且浏览和测试 TensorFlow 示例。 一旦你完成你的工作,解除环境,输入deactivate,并且你将回到正常的 shell。 deactivate 就这些!你已经成功安装了 TensorFlow,并且你可以开始使用它了。 三、总结 我们已经向你展示如何在 CentOS 8 上虚拟环境中安装 TensorFlow。
本文最先发表在: https://www.itcoder.tech/posts/how-to-install-elasticsearch-on-centos-8/ Elasticsearch 是一个开源全文搜索和分析引擎。它支持 RESTful 操作,并且允许你存储,搜索,并且实时分析大量的数据。Elasticsearch是最流行的搜索引擎之一,可为具有复杂搜索要求的应用程序提供动力,例如大型电子商务商店和分析应用程序。 本文主要涉及在 CentOS 8 上安装 Elasticsearch。 一、 安装 Java Elasticsearch 是一个 Java 应用,因此,第一步就是安装 Java。 以 root 或者其他 sudo 用户身份运行下面的命令,去安装 OpenJDK 软件包: sudo dnf install java-11-openjdk-devel 通过打印Java 版本验证 Java 安装: java -version 输出将会像下面这样: openjdk version "11.0.5" 2019-10-15 LTS OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode, sharing) 二、安装 Elasticsearch Elasticsearch 在标准的CentOS 8 源中不可用。我们将会从 Elasticsearch RPM 源中安装它。 使用rpm命令导入源的 GPG: sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 打开你的文本编辑器,并且在/etc/yum.repos.d目录下创建源文件: sudo nano /etc/yum.repos.d/elasticsearch.repo 粘贴下面的内容到文件中: [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 保存文件并且关闭你的文本编辑器。 现在源已经被启用,安装 Elasticsearch 软件包,输入: sudo dnf install elasticsearch 一旦安装过程完成,启动并且启用这个服务: sudo systemctl enable elasticsearch.service --now 想要验证 Elasticsearch 是否运行,使用 curl 命令发送一个 HTTP 请求到本地的 port 9200: curl -X GET "localhost:9200/" 输出将会像下面这样: { "name" : "centos8.localdomain", "cluster_name" : "elasticsearch", "cluster_uuid" : "V_mfjn2PRJqX3PlZb_VD7w", "version" : { "number" : "7.6.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3", "build_date" : "2020-02-06T00:09:00.449973Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } 它将会需要 5-10s 来启动服务。 如果你看到 curl: (7) Failed to connect to localhost port 9200: Connection refused,请稍等几秒钟,并且重试。 想要查看Elasticsearch服务的信息,使用下面的命令: sudo journalctl -u elasticsearch 到这里,你已经在你的 CentOS 服务器上安装好 Elasticsearch。 三、 配置 Elasticsearch Elasticsearch 数据存储在 /var/lib/elasticsearch目录,配置文件在/etc/elasticsearch。 默认情况下,Elasticsearch 被配置文件仅仅监听 localhost。 如果客户端连接的数据库在同一个主机上,并且你设置了单节点集群,你不需要修改默认的配置文件。 3.1 远程访问 开箱即用的Elasticsearch,没有实现鉴权,因此它可以被任何人通过 HTTP API 进行访问。如果你允许远程访问你的Elasticsearch服务器,你需要配置你的防火墙,并且仅仅允许从受信任的客户端通过9200端口访问Elasticsearch。 例如,仅仅允许从192.168.121.80来的访问,输入下面的命令: 运行下面的命令,允许从远程受信任的 IP 地址访问 9200端口: sudo firewall-cmd --new-zone=elasticsearch --permanent sudo firewall-cmd --reload sudo firewall-cmd --zone=elasticsearch --add-source=192.168.121.80/32 --permanent sudo firewall-cmd --zone=elasticsearch --add-port=9200/tcp --permanent sudo firewall-cmd --reload 不要忘记将`192.168.121.80`修改成你的远程 IP 地址。 稍后,如果你想允许从其他IP 地址访问,使用: sudo firewall-cmd --zone=elasticsearch --add-source=<IP_ADDRESS> --permanent sudo firewall-cmd --reload 一旦防火墙被配置好了,下一步就是修改Elasticsearch的配置文件,并且允许Elasticsearch监听外部连接。 想要这样做,打开elasticsearch.yml配置文件: sudo nano /etc/elasticsearch/elasticsearch.yml 搜索包含network.host,去掉注释,并且修改为: network.host: 0.0.0.0 如果你拥有多个网络接口,指定接口 IP 地址来强制 Elasticsearch 仅仅监听指定的网络接口。 重启 Elasticsearch 服务,使修改生效: sudo systemctl restart elasticsearch 就这些。你现在可以从远程位置连接到Elasticsearch服务器。 四、 总结 我们已经展示了如何在 CentOS 8 上安装 Elasticsearch。 如果你有任何疑问,请通过以下方式联系我们: 微信: sn0wdr1am86 微信群:加上面的微信,备注微信群 QQ: 3217680847 QQ 群: 82695646
本文主要介绍如何在macOS上安装配置golang开发环境。 一、安装 Homebrew 打开终端,输入以下命令安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装配置 golang 1. 通过brew方式安装golang 在终端中输入以下命令安装golang brew install go 或者 brew install golang 2. 通过下载安装包,安装golang 到官方网站 Downloads 下载golang软件安装包。 或者直接点击下面的链接,下载安装。 go1.12.9.darwin-amd64.pkg (121MB) 3. 配置goproxy代理 由于众所周知的原因,下载golang相关模块非常困难。 这里介绍一种相对靠谱的解决方案:go mod + goproxy 通过编辑器打开 .bashrc 或者 .zshrc,将以下配置贴到文件最后,并保存。 # Enable the go modules feature export GO111MODULE=on # Set the GOPROXY environment variable export GOPROXY=https://mirrors.aliyun.com/goproxy/ 打开终端,输入以下命令使环境变量生效。 source .bashrc 或者 source .zshrc 三、 创建HelloWorld项目,验证golang 在终端输入以下命令,创建HelloWorld项目。如果编译运行成功,则会打印出"Hello, World!" # 创建helloworld项目 mkdir helloworld # 进入helloworld cd helloworld # 创建main.go 文件 cat>main.go<<EOF package main import "fmt" func main() { fmt.Println("Hello, World!") } EOF # 通过go mod 命令,初始化依赖文件 go mod init github.com/snowdreamtech/helloworld # 编译,运行 go build main.go && ./main
一、简介 frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。详细文档请参考:https://github.com/fatedier/frp/blob/master/README_zh.md frp 支持 macOS, freebsd, windows,linux x64,linux i386, linux arm,Linux arm64, Mips等不同的系统和CPU架构,并分别打包了文件。 因此,为了方便在不同的系统中安装和配置frp,我基于docker对frp进行了封装和打包。 但是由于docker的限制,目前只支持(amd64, arm32v6, arm32v70, arm64v8, i386) 项目地址: https://github.com/snowdreamtech/frp DockerHub: https://hub.docker.com/r/snowdreamtech/frps https://hub.docker.com/r/snowdreamtech/frpc 二、使用 首先,在服务器端和客户端预装docker。 具体操作可以参考:https://www.docker.com/products/docker-desktop 在服务器端部署frps docker run --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps 在客户端部署frpc docker run --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc 三、反馈 如果您在使用过程中遇到什么问题,可以到以下网站提交问题和建议:https://github.com/snowdreamtech/frp/issues
本文基于Centos 7下安装配置Nginx操作实践记录整理。 一、配置 EPEL源 sudo yum install -y epel-release sudo yum -y update 二、安装Nginx sudo yum install -y nginx 安装成功后,默认的网站目录为: /usr/share/nginx/html 默认的配置文件为:/etc/nginx/nginx.conf 自定义配置文件目录为: /etc/nginx/conf.d/ 三、开启端口80和443 如果你的服务器打开了防火墙,你需要运行下面的命令,打开80和443端口。 sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload 如果你的服务器是阿里云ECS,你还可以通过控制台安全组,打开80和443端口,或者其他自定义端口。 具体操作路径: 阿里云ECS服务器 -》 安全组 -》 配置规则 -》 安全组规则 -》 入方向 -》 添加安全组规则 端口范围: 比如你要打开80端口,这里就填写 80/80 。 优先级: 优先级可选范围为1-100,默认值为1,即最高优先级。 示例图如下: 四、操作Nginx 1.启动 Nginx systemctl start nginx 2.停止Nginx systemctl stop nginx 3.重启Nginx systemctl restart nginx 4.查看Nginx状态 systemctl status nginx 5.启用开机启动Nginx systemctl enable nginx 6.禁用开机启动Nginx systemctl disable nginx 五、配置Nginx 1. 安装Https免费证书(以阿里云域名为例) 一键安装acme.sh curl https://get.acme.sh | sh echo 'alias acme.sh=~/.acme.sh/acme.sh' >> ~/.bashrc source ~/.bashrc 生成Https证书 export Ali_Key="**********" export Ali_Secret="**********" acme.sh --issue --dns dns_ali -d domain 其中: 点击阿里云后台,右上角用户头像,菜单中选择accesskeys。 查看AccessKey ID 和 Access Key Secret,即对应上面的Ali_Key 和 Ali_Secret。 domain 对应该账户下购买的阿里云域名。 拷贝证书到nginx mkdir -p /etc/nginx/ssl acme.sh --install-cert -d domain \ --key-file /etc/nginx/ssl/domain.key \ --fullchain-file /etc/nginx/ssl/domain.cer \ --reloadcmd "service nginx force-reload" https证书拷贝成功。 目前https证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心. 2. 配置nginx 删除/etc/nginx/nginx.conf中的server部分代码。 server { ... } 在/etc/nginx/conf.d 创建自定义配置文件default.conf server { listen 80; listen 443 ssl; server_name domain www.domain; location / { root /usr/share/nginx/html; index index.html index.htm; } ssl on; ssl_certificate /etc/nginx/ssl/domain.crt; ssl_certificate_key /etc/nginx/ssl/domain.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; ssl_prefer_server_ciphers on; error_page 497 https://$host$uri?$args; } 其中: root /usr/share/nginx/html; 表示网站文件目录,后面的分号不可省略。 ssl_certificate和ssl_certificate_key 指向https证书。 error_page 497 https://$host$uri?$args; 这句的作用是,强制http跳转到https。 六、参考文档 How To Install Nginx on CentOS 7 How To Install And Configure NGINX On CentOS 7 How to install Nginx on CentOS 7 or RHEL 7 How To Install Nginx on CentOS 7 How to Install Nginx on CentOS 7 acme.sh nginx 使用 acme.sh 配置支持 HTTPS 访问 nginx配置ssl实现https访问 小白文
作者:snowdream Email:yanghui1986527#gmail.com Github: https://github.com/snowdream 原文地址:https://snowdream.github.io/blog/2017/11/13/android-wifimanager-leak-context/ 问题 之前在处理内存泄漏相关问题时,碰到一个奇怪的问题。有一个闪屏界面,由于包含大图片,屡次内存泄漏,屡次修改。屡次修改,屡次还内存泄漏。直到有一天,通过MAT工具分析一个相关hprof文件时,发现一个新的case: 内存泄漏矛头直指WifiManager。 关于WifiManager内存泄漏问题,在Android官方网站得到确认: Memory leak in WifiManager/WifiService of Android 4.2 WifiManager use AsyncChannel leading to memory leak 解决 对于WifiManager,我一直都是这么用的: WifiManager wifiManager = ((WifiManager) this.getSystemService(Context.WIFI_SERVICE)); 但是当我查阅WifiManager相关文档后,我终于改变了看法。在WifiManager官方文档 https://developer.android.com/reference/android/net/wifi/WifiManager.html 中,提到一句话: "On releases before N, this object should only be obtained from an application context, and not from any other derived context to avoid memory leaks within the calling process." 大概意思便是: 在Android N以前,你应该只通过ApplicationContext来获取WifiManager,否则可能面临内存泄漏问题。 WifiManager wifiManager = ((WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE)); 分析 为什么WifiManager可能发生内存泄漏? 下面我们具体分析一下: 以Android 5.1.1_r6为例进行分析。 1.打开在线源码网站: http://androidxref.com/ 。找到ContextImpl.java类源码。 2.从ContextImpl.java源码中,我们可以看到:一个进程可能创建多个WifiManager。同时,我们把Activity(也就是ctx.getOuterContext()),传给了WifiManager。 class ContextImpl extends Context { @Override public Object getSystemService(String name) { ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name); return fetcher == null ? null : fetcher.getService(this); } static { registerService(WIFI_SERVICE, new ServiceFetcher() { public Object createService(ContextImpl ctx) { IBinder b = ServiceManager.getService(WIFI_SERVICE); IWifiManager service = IWifiManager.Stub.asInterface(b); return new WifiManager(ctx.getOuterContext(), service); }}); } } 3.我们再接着浏览 WifiManager源码。这里把Context传给了sAsyncChannel,而这个sAsyncChannel竟然是一个静态变量。 public class WifiManager { private static AsyncChannel sAsyncChannel; public WifiManager(Context context, IWifiManager service) { mContext = context; mService = service; init(); } private void init() { synchronized (sThreadRefLock) { if (++sThreadRefCount == 1) { Messenger messenger = getWifiServiceMessenger(); if (messenger == null) { sAsyncChannel = null; return; } sHandlerThread = new HandlerThread("WifiManager"); sAsyncChannel = new AsyncChannel(); sConnected = new CountDownLatch(1); sHandlerThread.start(); Handler handler = new ServiceHandler(sHandlerThread.getLooper()); sAsyncChannel.connect(mContext, handler, messenger); try { sConnected.await(); } catch (InterruptedException e) { Log.e(TAG, "interrupted wait at init"); } } } } } 4.再接着浏览AsyncChannel的源码。这个context被保存在了AsyncChannel内部。换一句话来说:你传进来的Activity/Fragment,被一个静态对象给持有了。一旦这个静态对象没有正确释放,就会造成内存泄漏。 public class AsyncChannel { /** Context for source */ private Context mSrcContext; /** * Connect handler and messenger. * * Sends a CMD_CHANNEL_HALF_CONNECTED message to srcHandler when complete. * msg.arg1 = status * msg.obj = the AsyncChannel * * @param srcContext * @param srcHandler * @param dstMessenger */ public void connect(Context srcContext, Handler srcHandler, Messenger dstMessenger) { if (DBG) log("connect srcHandler to the dstMessenger E"); // We are connected connected(srcContext, srcHandler, dstMessenger); // Tell source we are half connected replyHalfConnected(STATUS_SUCCESSFUL); if (DBG) log("connect srcHandler to the dstMessenger X"); } /** * Connect handler to messenger. This method is typically called * when a server receives a CMD_CHANNEL_FULL_CONNECTION request * and initializes the internal instance variables to allow communication * with the dstMessenger. * * @param srcContext * @param srcHandler * @param dstMessenger */ public void connected(Context srcContext, Handler srcHandler, Messenger dstMessenger) { if (DBG) log("connected srcHandler to the dstMessenger E"); // Initialize source fields mSrcContext = srcContext; mSrcHandler = srcHandler; mSrcMessenger = new Messenger(mSrcHandler); // Initialize destination fields mDstMessenger = dstMessenger; if (DBG) log("connected srcHandler to the dstMessenger X"); } } 5.最后。既然google声称Android 7.0已经改了这个问题。那我们就来围观一下这个改动:WiFiManager中的AsyncChannel已经被声明为普通对象,而不是静态的。 http://androidxref.com/7.0.0_r1/xref/frameworks/base/wifi/java/android/net/wifi/WifiManager.java#mAsyncChannel 发散 另外,查询资料,发现不止WiFiManager,还有AudioManager等也可能存在内存泄漏问题。具体参考: https://android-review.googlesource.com/#/c/platform/frameworks/base/+/140481/ 因此,建议,除了和UI相关的系统service,其他一律使用ApplicationContext来获取。 欢迎大家关注我的微信公众号: sn0wdr1am 参考 WifiManager WifiManager use AsyncChannel leading to memory leak [Memory leak in WifiManager/WifiService of Android 4.2](https://issuetracker.google.com/issues/36964970) Fix context leak with AudioManager @SystemService for WifiManager causes a memory leak #1628 Memory leak in WiFiManager from Android SDK [signed apk error [WifiManagerLeak]](https://stackoverflow.com/a/42639000) Android: 记一次Android内存泄露 联系方式 Email:yanghui1986527#gmail.com Github: https://github.com/snowdream Blog: http://snowdream.github.io/blog/ 简书:http://www.jianshu.com/u/748f0f7e6432 云栖博客:https://yq.aliyun.com/u/snowdream86
干货分享-FASTJSON那些事.pptx,已获得作者授权转发。 欢迎扫码关注我的微信公众号: sn0wdr1am
2020年06月
2020年05月
2020年04月
看看是否是网络问题,更换镜像源仓库试试。
看起来不能,不然你重新注册一个帐号吧。