{"id":2322,"date":"2019-09-26T15:02:09","date_gmt":"2019-09-26T08:02:09","guid":{"rendered":"https:\/\/tino.vn\/?post_type=ht_kb&#038;p=2322"},"modified":"2019-10-05T14:02:26","modified_gmt":"2019-10-05T07:02:26","slug":"huong-dan-cai-dat-ruby-on-rail-redmine-len-he-thong-su-dung-directadmin-nginx-reverse-proxy","status":"publish","type":"ht_kb","link":"https:\/\/tino.vn\/blog\/docs\/huong-dan-cai-dat-ruby-on-rail-redmine-len-he-thong-su-dung-directadmin-nginx-reverse-proxy\/","title":{"rendered":"H\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t Ruby on Rail, Redmine l\u00ean h\u1ec7 th\u1ed1ng s\u1eed d\u1ee5ng Directadmin + Nginx reverse proxy"},"content":{"rendered":"<h3 id=\"Gi\u1edbi_thi\u1ec7u:\"><span id=\"Gioi_thieu\"><strong>Gi\u1edbi thi\u1ec7u<\/strong>:<\/span><\/h3>\n<p>Ruby on Rails l\u00e0 m\u1ed9t khung l\u00e0m vi\u1ec7c (web framework) \u0111\u01b0\u1ee3c vi\u1ebft tr\u00ean ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh Ruby v\u00e0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong vi\u1ec7c x\u00e2y d\u1ef1ng v\u00e0 ph\u00e1t tri\u1ec3n c\u00e1c \u1ee9ng d\u1ee5ng web.<\/p>\n<p>Redmine l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd v\u1ea5n \u0111\u1ec1 (issue) d\u1ef1a tr\u00ean n\u1ec1n t\u1ea3ng web, c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng th\u1ef1c hi\u1ec7n c\u00e1c ch\u1ee9c n\u0103ng qu\u1ea3n l\u00fd c\u00e1c lo\u1ea1i v\u1ea5n \u0111\u1ec1: nhi\u1ec7m v\u1ee5, l\u1ed7i, y\u00eau c\u1ea7u h\u1ed7 tr\u1ee3, \u2026 c\u1ee7a d\u1ef1 \u00e1n m\u1ed9t c\u00e1ch c\u01a1 b\u1ea3n. Redmine c\u00f3 \u01b0u th\u1ebf trong qu\u1ea3n l\u00fd d\u1ef1 \u00e1n l\u00e0 \u0111\u00e1p \u1ee9ng s\u1eb5n s\u00e0ng nh\u1eefng n\u1ed9i dung \u0111\u01b0\u1ee3c quan t\u00e2m cho c\u00e1c vai tr\u00f2 t\u1eeb qu\u1ea3n l\u00fd d\u1ef1 \u00e1n t\u1edbi c\u00e1c th\u00e0nh vi\u00ean trong d\u1ef1 \u00e1n v\u00e0 c\u00e1c c\u00e1 nh\u00e2n\/nh\u00f3m\/b\u1ed9 ph\u1eadn li\u00ean quan kh\u00e1c.<\/p>\n<p>DirectAdmin l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n tr\u1ecb hosting, tr\u1ef1c quan, d\u1ec5 s\u1eed d\u1ee5ng,<\/p>\n<p>Redmine l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 \u0111\u1ec3 qu\u1ea3n l\u00fd d\u1ef1 \u00e1n, \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng ng\u00f4n ng\u1eef Ruby on Rails. Redmine l\u00e0 m\u1ed9t \u1ee9ng d\u1ee5ng open source n\u00ean n\u00f3 mi\u1ec5n ph\u00ed v\u00e0 \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi GNU General Public License v2 (GPL). M\u1ed9t s\u1ed1 t\u00ednh n\u0103ng c\u1ee7a redmine:<\/p>\n<ul>\n<li>H\u1ed7 tr\u1ee3 nhi\u1ec1u project<\/li>\n<li>Qu\u1ea3n l\u00fd k\u1ebft n\u1ed1i<\/li>\n<li>H\u1ec7 th\u1ed1ng theo d\u00f5i ti\u1ebfn \u0111\u1ed9 c\u00f4ng vi\u1ec7c<\/li>\n<li>Qu\u1ea3n l\u00fd tin t\u1ee9c, t\u00e0i li\u1ec7u<\/li>\n<li>H\u1ec7 th\u1ed1ng c\u1ea3nh b\u00e1o qua email<\/li>\n<li>H\u1ed7 tr\u1ee3 x\u00e1c th\u1ef1c b\u1eb1ng Ldap<\/li>\n<li>H\u1ed7 tr\u1ee3 \u0111a ng\u00f4n ng\u1eef<\/li>\n<li>H\u1ed7 tr\u1ee3 nhi\u1ec1u database<\/li>\n<\/ul>\n<h3 id=\"Th\u1ef1c_Hi\u1ec7n\"><span id=\"Thuc_Hien\"><strong>Th\u1ef1c Hi\u1ec7n<\/strong><\/span><\/h3>\n<h4 id=\"B\u01b0\u1edbc_1:_C\u00e0i_\u0111\u1eb7t_c\u00e1c_g\u00f3i_c\u1ea7n_thi\u1ebft\"><span id=\"Buoc_1_Cai_dat_cac_goi_can_thiet\"><strong>B\u01b0\u1edbc 1: C\u00e0i \u0111\u1eb7t c\u00e1c g\u00f3i c\u1ea7n thi\u1ebft<\/strong><\/span><\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">yum install gcc-c++ patch readline readline-devel zlib zlib-devel ImageMagick ImageMagick-devel\r\n\r\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">yum install libyaml-devel libffi-devel openssl-devel make<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">yum install bzip2 autoconf automake libtool bison iconv-devel<\/pre>\n<h4 id=\"B\u01b0\u1edbc_2:_C\u00e0i_\u0111\u1eb7t_Ruby_on_Rails\"><span id=\"Buoc_2_Cai_dat_Ruby_on_Rails\"><strong>B\u01b0\u1edbc 2: C\u00e0i \u0111\u1eb7t Ruby on Rails<\/strong><\/span><\/h4>\n<ul>\n<li>C\u00e0i \u0111\u1eb7t\u00a0<strong>gnupg<\/strong>\u00a0keyserver<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">gpg2 --keyserver hkp:\/\/keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3<\/pre>\n<p>Trong tr\u01b0\u1eddng h\u1ee3p l\u1ec7nh tr\u00ean kh\u00f4ng th\u1ef1c hi\u1ec7n \u0111\u01b0\u1ee3c, c\u00f3 th\u1ec3 thay th\u1ebf b\u1eb1ng l\u1ec7nh sau:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">command curl -sSL https:\/\/rvm.io\/mpapis.asc | gpg2 --import -\"<\/pre>\n<p>Ti\u1ebfn h\u00e0nh c\u00e0i \u0111\u1eb7t\u00a0<strong>rvm<\/strong>\u00a0hay c\u00f2n g\u1ecdi l\u00e0 Ruby version manager, v\u1edbi ph\u1ea7n m\u1ec1m n\u00e0y, ta c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng c\u00e0i \u0111\u1eb7t v\u00e0 thay \u0111\u1ed5i c\u00e1c version c\u1ee7a ruby \u0111\u01b0\u1ee3c c\u00e0i tr\u00ean h\u1ec7 th\u1ed1ng, m\u00e0 kh\u00f4ng c\u1ea7n thao t\u00e1c ph\u1ee9c t\u1ea1p.<\/p>\n<p>Th\u1ef1c hi\u1ec7n c\u00e2u l\u1ec7nh sau \u0111\u1ec3 c\u00e0i \u0111\u1eb7t<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">curl -L https:\/\/get.rvm.io | bash -s stable --ruby<\/pre>\n<p>M\u1eb7c \u0111\u1ecbnh h\u1ec7 th\u1ed1ng s\u1ebd c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n Ruby m\u1edbi nh\u1ea5t.<\/p>\n<p>Sau khi c\u00e0i \u0111\u1eb7t xong, ta s\u1ebd c\u1ea7n thi\u1ebft l\u1eadp m\u00f4i tr\u01b0\u1eddng cho Ruby, b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng l\u1ec7nh sau:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">source \/etc\/profile.d\/rvm.sh<\/pre>\n<p>Redmine phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t (3.3) \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 t\u1ed1t nh\u1ea5t b\u1edfi Ruby 2.3 v\u00ec v\u1eady, ta s\u1ebd ti\u1ebfn h\u00e0nh chuy\u1ec3n phi\u00ean b\u1ea3n Ruby \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean h\u1ec7 th\u1ed1ng sang phi\u00ean b\u1ea3n c\u1ea7n thi\u1ebft.<\/p>\n<p>C\u00e0i \u0111\u1eb7t Ruby 2.3.1<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">rvm install 2.3.1<\/pre>\n<p>Chuy\u1ec3n phi\u00ean b\u1ea3n m\u1eb7c \u0111\u1ecbnh c\u1ee7a h\u1ec7 th\u1ed1ng sang Ruby 2.3.1<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">rvm use 2.3.1 --default<\/pre>\n<p>Ki\u1ec3m tra l\u1ea1i th\u00f4ng tin<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">ruby --version<\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y th\u00f4ng tin nh\u01b0 sau<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">[root@cloud9591 ~]# ruby --version\r\nruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]\r\n<\/pre>\n<p>Ti\u1ebfn h\u00e0nh c\u00e0i \u0111\u1eb7t Rails 4.2.3 b\u1eb1ng l\u1ec7nh sau :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">gem install rails -v 4.2.3<\/pre>\n<p>Trong tr\u01b0\u1eddng h\u1ee3p qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t th\u00e0nh c\u00f4ng, h\u1ec7 th\u1ed1ng s\u1ebd tr\u1ea3 l\u1ea1i th\u00f4ng s\u1ed1 tr\u00ean m\u00e0n h\u00ecnh t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau ( c\u00f3 th\u1ec3 sai kh\u00e1c s\u1ed1 gems \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t)<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">Done installing documentation for thread_safe, tzinfo, concurrent-ruby, i18n, activesupport, rails-deprecated_sanitizer, mini_portile2, nokogiri, rails-dom-testing, crass, loofah, rails-html-sanitizer, erubis, builder, actionview, rack, rack-test, actionpack, sprockets, sprockets-rails, bundler, thor, railties, globalid, activejob, mini_mime, mail, actionmailer, arel, activemodel, activerecord, rails after 413 seconds\r\n32 gems installed<\/pre>\n<p>Ki\u1ec3m tra l\u1ea1i th\u00f4ng tin<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">[root@cloud9591 ~]# rails --version\r\nRails 4.2.3<\/pre>\n<p>C\u00e0i \u0111\u1eb7t bundler b\u1eb1ng l\u1ec7nh sau :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">gem install bundler<\/pre>\n<p>C\u00e0i \u0111\u1eb7t passengerpassenger b\u1eb1ng l\u1ec7nh sau :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">gem install passenger<\/pre>\n<p>C\u00e0i \u0111\u1eb7t Apache passenger modude<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">passenger-install-apache2-module<\/pre>\n<p>C\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c thi\u1ebft \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh c\u1ee7a module (Enter 2 l\u1ea7n khi \u0111\u01b0\u1ee3c h\u1ecfi th\u00f4ng s\u1ed1 c\u00e0i \u0111\u1eb7t)<\/p>\n<p>Khi module \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t xong, h\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra \u0111\u01b0\u1eddng d\u1eabn t\u1edbi th\u01b0 vi\u1ec7n c\u1ee7a Passenger, b\u1ea1n c\u1ea7n l\u01b0u c\u00e1c th\u00f4ng tin n\u00e0y \u0111\u1ec3 th\u00eam v\u00e0o file c\u1ea5u h\u00ecnh httpd.conf sau n\u00e0y. T\u1ea1i \u0111\u00e2y th\u00f4ng s\u1ed1 \u0111\u01b0\u1ee3c t\u1ea1o ra l\u00e0:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">LoadModule passenger_module \/usr\/local\/rvm\/gems\/ruby-2.3.1\/gems\/passenger-5.1.2\/buildout\/apache2\/mod_passenger.so<br \/>\n&lt;IfModule mod_passenger.c&gt;<br \/>\nPassengerRoot \/usr\/local\/rvm\/gems\/ruby-2.3.1\/gems\/passenger-5.1.2<br \/>\nPassengerDefaultRuby \/usr\/local\/rvm\/gems\/ruby-2.3.1\/wrappers\/ruby<br \/>\n&lt;\/IfModule&gt;<\/code><\/p>\n<h4 id=\"B\u01b0\u1edbc_3:_C\u00e0i_\u0111\u1eb7t_Redmine\"><span id=\"Buoc_3_Cai_dat_Redmine\"><strong>B\u01b0\u1edbc 3: C\u00e0i \u0111\u1eb7t Redmine<\/strong><\/span><\/h4>\n<p id=\"_tao-database-cho-redmine-6\">T\u1ea1o database cho redmine:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">mysql -u root -p<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">mysql&gt; CREATE DATABASE redmine;\r\nmysql&gt; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'redmine';\r\nmysql&gt; FLUSH PRIVILEGES;\r\nmysql&gt; EXIT;<\/pre>\n<p id=\"_cau-hinh-virtual-host-cho-nginx-8\">C\u1ea5u h\u00ecnh virtual host cho nginx:<\/p>\n<p>Th\u00eam d\u00f2ng sau v\u00e0o m\u1ee5c http c\u1ee7a file \/opt\/nginx\/conf\/nginx.conf<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">include vhost\/*.conf;<\/pre>\n<p>T\u1ea1o th\u01b0 m\u1ee5c vhost \u0111\u1ec3 c\u1ea5u h\u00ecnh virtual host.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">mkdir -p \/opt\/nginx\/conf\/vhost<\/pre>\n<p>Trong th\u01b0 m\u1ee5c vhost t\u1ea1o file redmine.conf<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">server { listen 80; server_name www.redmine-test.com;\r\nroot \/var\/www\/redmine\/public; passenger_enabled on; client_max_body_size 50m; # Max attachemnt size\r\n# redirect server error pages to the static page \/50x.html # error_page 500 502 503 504 \/50x.html; location = \/50x.html { root html; } }<\/pre>\n<p id=\"_tao-file-script-de-bat-tat-service-nginx-9\">T\u1ea1o file script \u0111\u1ec3 b\u1eadt t\u1eaft service nginx<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">vim \/lib\/systemd\/system\/nginx.service<\/pre>\n<p>Th\u00eam v\u00e0o file \u0111o\u1ea1n code sau:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network.target remote-fs.target nss-lookup.target\r\n[Service] Type=forking PIDFile=\/opt\/nginx\/logs\/nginx.pid ExecStartPre=\/opt\/nginx\/sbin\/nginx -t ExecStart=\/opt\/nginx\/sbin\/nginx ExecReload=\/bin\/kill -s HUP $MAINPID ExecStop=\/bin\/kill -s QUIT $MAINPID PrivateTmp=true\r\n[Install] WantedBy=multi-user.target<\/pre>\n<p id=\"_khoi-dong-nginx-10\">Kh\u1edfi \u0111\u1ed9ng nginx:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">systemctl daemon-reload\r\nsystemctl start nginx<\/pre>\n<p id=\"_cai-dat-redmine-11\">C\u00e0i \u0111\u1eb7t Redmine:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">cd \/var\/www\/\r\nsvn co https:\/\/svn.redmine.org\/redmine\/branches\/3.4-stable redmine\r\ncp config\/configuration.yml.example config\/configuration.yml\r\ncp config\/database.yml.example config\/database.yml<\/pre>\n<p>Ch\u1ec9nh s\u1eeda file database.yml<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">vim \/opt\/nginx\/config\/database.yml<\/pre>\n<p>Ch\u1ec9nh s\u1eeda l\u1ea1i file \u0111o\u1ea1n config sau:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">production: \r\nadapter: mysql2 \r\ndatabase: redmine \r\nhost: localhost \r\nusername: redmine \r\npassword: \"redmine\" \r\nencoding: utf8<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2323\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/26d308c7-e49d-4391-b7b0-a3b25b886d50.png\" alt=\"\" width=\"542\" height=\"301\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/26d308c7-e49d-4391-b7b0-a3b25b886d50.png 542w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/26d308c7-e49d-4391-b7b0-a3b25b886d50-300x167.png 300w\" sizes=\"(max-width: 542px) 100vw, 542px\" \/><\/p>\n<p>T\u1ea1o th\u01b0 m\u1ee5c \u0111\u1ec3 c\u00e0i \u0111\u1eb7t c\u00e1c plugin<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">mkdir -p tmp tmp\/pdf public\/plugin_assets\r\nchown -R nobody:nobody files log tmp public\/plugin_assets\r\nchmod -R 775 files log tmp public\/plugin_assets<\/pre>\n<p id=\"_cai-dat-bundle-de-quan-ly-gems-12\">C\u00e0i \u0111\u1eb7t Bundle \u0111\u1ec3 qu\u1ea3n l\u00fd gems:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">gem install bundler\r\nbundle install --without development test\r\nbundle exec rake generate_secret_token<\/pre>\n<p>T\u1ea1o c\u1ea5u tr\u00fac databse cho redmine<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">RAILS_ENV=production bundle exec rake db:migrate\r\nRAILS_ENV=production bundle exec rake redmine:load_default_data<\/pre>\n<p id=\"_restart-lai-nginx-13\">Restart l\u1ea1i nginx<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">systemctl restart nginx<\/pre>\n<p>K\u1ebft n\u1ed1i v\u00e0o redmine qua tr\u00ecnh duy\u1ec7t web<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2324\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/70907ee8-9283-4705-a51b-46a95cd8eaac.png\" alt=\"\" width=\"825\" height=\"166\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/70907ee8-9283-4705-a51b-46a95cd8eaac.png 825w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/70907ee8-9283-4705-a51b-46a95cd8eaac-300x60.png 300w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2019\/09\/70907ee8-9283-4705-a51b-46a95cd8eaac-768x155.png 768w\" sizes=\"(max-width: 825px) 100vw, 825px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gi\u1edbi thi\u1ec7u: Ruby on Rails l\u00e0 m\u1ed9t khung l\u00e0m vi\u1ec7c (web framework) \u0111\u01b0\u1ee3c vi\u1ebft tr\u00ean ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh Ruby v\u00e0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong vi\u1ec7c x\u00e2y d\u1ef1ng v\u00e0 ph\u00e1t tri\u1ec3n c\u00e1c \u1ee9ng d\u1ee5ng web. Redmine l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd v\u1ea5n \u0111\u1ec1 (issue) d\u1ef1a tr\u00ean n\u1ec1n t\u1ea3ng web, c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng th\u1ef1c [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":2437,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"tags":[],"ht_kb_category":[23],"class_list":["post-2322","ht_kb","type-ht_kb","status-publish","format-standard","has-post-thumbnail","hentry","ht_kb_category-control-panel-direct-admin"],"_links":{"self":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb\/2322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/comments?post=2322"}],"version-history":[{"count":0,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb\/2322\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media\/2437"}],"wp:attachment":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media?parent=2322"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/tags?post=2322"},{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb_category?post=2322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}